1

当给定一组都具有相同data元素的 jQuery 对象时,询问该数据的值时,class仅给我第一个元素。

<div class="Class" data-bool=false></div>
<div class="Class" data-bool=true></div>


var val = $(".Class").data("bool"); //false

无需使用$.each()和遍历所有元素,有没有办法测试它们的所有数据值是否相等?

4

4 回答 4

3

如果你真的想在一行中做到这一点,你可以尝试这样的事情:

$(".Class").length === $('.Class[data-bool=true]').length;

当您向属性添加更多可能的值时,此方法将变得越来越复杂,data并且不会考虑通过 jQuery 的data()方法进行的更新。编写一个简单的循环会更容易。

于 2013-08-06T20:10:17.260 回答
2

如果你真的讨厌编写循环,你可以通过创建一个 jQuery 插件来解决它:

$.fn.allData = function(key, value) {
  var result = true;
  this.each(function() {
    if ($(this).data(key) != value)
      return result = false;
  });
  return result;
};

然后:

var allTrue = $('.Class').allData('bool', true);

同伴“anyData”留给读者作为练习:)

于 2013-08-06T20:29:22.773 回答
2

如果您决定今天讨厌循环...咳咳。你可以:

if($(".Class").length == $(".Class[data-bool=false]").length){
   // cool stuff here
}
于 2013-08-06T20:11:41.483 回答
1

澄清一下,这个问题的真正答案是否定的。否则,您可以使用纯 JavaScript 而不使用jQuery来完成:)。当然,您可以将其减少到代码中的一行,但那是另一回事。

于 2013-08-06T20:24:29.327 回答