当给定一组都具有相同data
元素的 jQuery 对象时,询问该数据的值时,class
仅给我第一个元素。
<div class="Class" data-bool=false></div>
<div class="Class" data-bool=true></div>
var val = $(".Class").data("bool"); //false
无需使用$.each()
和遍历所有元素,有没有办法测试它们的所有数据值是否相等?
当给定一组都具有相同data
元素的 jQuery 对象时,询问该数据的值时,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()
方法进行的更新。编写一个简单的循环会更容易。
如果你真的讨厌编写循环,你可以通过创建一个 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”留给读者作为练习:)
如果您决定今天讨厌循环...咳咳。你可以:
if($(".Class").length == $(".Class[data-bool=false]").length){
// cool stuff here
}
澄清一下,这个问题的真正答案是否定的。否则,您可以使用纯 JavaScript 而不使用jQuery来完成:)。当然,您可以将其减少到代码中的一行,但那是另一回事。