在没有循环的情况下测试一组元素之间的html5数据相等性

test for html5 data equality among a set of elements without a loop

本文关键字:之间 元素 一组 html5 数据 循环 情况下 测试      更新时间:2023-09-26

当给定一组jQuery对象,这些对象都具有相同的data元素时,询问关于class的数据值只会得到第一个元素。

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

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

在不必使用$.each()并遍历所有元素的情况下,有没有一种方法可以测试它们的所有数据值是否相等?

如果你真的想在一行中完成这项工作,你可以尝试这样的方法:

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

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

如果您决定今天不喜欢循环。。。嗯。你可以:

if($(".Class").length == $(".Class[data-bool=false]").length){
   // cool stuff here
}

如果你真的讨厌写循环,你可以通过创建一个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"留给读者练习:)

为了澄清,真正的答案是。否则,您可以使用纯JavaScript而不使用jQuery:)。当然,您可以在代码中将其缩减为一行,但这是另一回事。