2014-09-26 35 views
0

我想建立一個json對象在比較的javascript/jquery中。下面是我有尋找文本來比較真或假

HTML:

<div class="field"> 
    <div>size</div> 
    <div>large</div> 
    <div>medium</div> 
    <div>number</div> 
</div> 

JS:

selectedObj = { 
    'fieldSize':false, 
    'sizeXSmall':false, 
    'sizeSmall':false, 
    'sizeMedium':false, 
    'sizeLarge':false, 
    'sizeXLarge':false, 
    'fieldName':false, 
    'fieldNum':false 
}; 

if(jQuery('.field div:contains("size")')){selectedObj['fieldSize'] = true} 
if(jQuery('.field div:contains("xs")')){selectedObj['sizeXSmall'] = true} 
if(jQuery('.field div:contains("small")')){selectedObj['sizeSmall'] = true} 
if(jQuery('.field div:contains("medium")')){selectedObj['sizeMedium'] = true} 
if(jQuery('.field div:contains("large")')){selectedObj['sizeLarge'] = true} 
if(jQuery('.field div:contains("xl")')){selectedObj['sizeXLarge'] = true} 
if(jQuery('.field div:contains("name")')){selectedObj['fieldName'] = true} 
if(jQuery('.field div:contains("number")')){selectedObj['fieldNum'] = true} 

所以最好我最終會得到一個對象,它看起來像這樣:

selectedObj = { 
    'fieldSize':true, 
    'sizeXSmall':false, 
    'sizeSmall':false, 
    'sizeMedium':true, 
    'sizeLarge':true, 
    'sizeXLarge':false, 
    'fieldName':false, 
    'fieldNum':true 
}; 

我,而不是結束與一切事物都是真實的物體相對立。這裏有一個例子:

http://jsfiddle.net/vz600nd7/ 

此外,當我安慰的前記錄它,它看起來像這樣經過:

preview mismatch

它看起來像「預覽」時給予正確的信息,但實際觀點不是。

+1

'的jQuery(」字段的div:包含( 「大小」) ')'返回一個總是爲真的jQuery對象,所以''jQuery('。field div:contains(「size」)'')' – 2014-09-26 06:15:42

+0

當記錄對象時不要相信'console.log'。它傾向於提供對象的實時視圖,因此即使在* console.log運行後屬性被更新了,控制檯仍然顯示更新的值。 – 2014-09-26 06:16:12

回答

2

正如我在評論中所說,jQuery(selector)將返回一個jQuery對象,它總是一個真值。所以你的if條件每次都會被執行。

我會嘗試像

var log = (function() { 
 
    var $log = $('#log'); 
 
    return function(msg) { 
 
    $('<p/>', { 
 
     text: msg 
 
    }).appendTo($log) 
 
    } 
 
})(); 
 

 
var map = { 
 
    'fieldSize': 'size', 
 
    'sizeXSmall': 'xs', 
 
    'sizeSmall': 'small', 
 
    'sizeMedium': 'medium', 
 
    'sizeLarge': 'large', 
 
    'sizeXLarge': 'xl', 
 
    'fieldName': 'name', 
 
    'fieldNum': 'number' 
 
}; 
 
selectedObj = { 
 
    'fieldSize': false, 
 
    'sizeXSmall': false, 
 
    'sizeSmall': false, 
 
    'sizeMedium': false, 
 
    'sizeLarge': false, 
 
    'sizeXLarge': false, 
 
    'fieldName': false, 
 
    'fieldNum': false 
 
}; 
 

 
var $els = jQuery('.field div'); 
 
$.each(map, function(key, value) { 
 
    selectedObj[key] = $els.is(':contains("' + value + '")') 
 
}); 
 
log('After: ' + JSON.stringify(selectedObj))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="field"> 
 
    <div>size</div> 
 
    <div>large</div> 
 
    <div>medium</div> 
 
    <div>number</div> 
 
</div> 
 
<div id="log"></div>
如果要檢測

+0

'var map = {...};'確實使代碼更好。 – Regent 2014-09-26 06:25:52

+0

這工作,謝謝! – 2014-09-26 06:28:14

0

,如果對象存在,使用:

if($('.field div:contains("size")')[0]) selectedObj['fieldSize'] = true; 
...