查找要比较true或false的文本

时间:2014-09-26 06:12:50

标签: javascript jquery json compare

我正在尝试在javascript / jquery中构建一个比较的json对象。这就是我所拥有的

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

看起来'预览'提供了正确的信息,但实际视图却没有。

2 个答案:

答案 0 :(得分:2)

正如我在评论中所说,jQuery(selector)将返回一个jQuery对象,它始终是一个真正的值。因此,每次都会执行if条件。

我会尝试类似

&#13;
&#13;
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))
&#13;
<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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果要检测,如果对象存在,请使用:

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