在没有循环的情况下测试一组元素之间的html5数据相等性
test for html5 data equality among a set of elements without a loop
当给定一组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:)。当然,您可以在代码中将其缩减为一行,但这是另一回事。
相关文章:
- 操作放置在画布上的元素之间的连接
- DOM元素和angular元素之间的主要区别是什么
- 如何附加<ul><李>元素位于某个特定条件的父元素列表之间
- 在JavaScript中,如何修复元素显示和变量创建之间的初始差异
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- 命名一个在“”和“”之间切换元素的函数;启用”;以及“;被禁用”;州
- JS get元素之间的差异's属性与elem.getAttribute(attr)和elem[attr]
- 在2个框之间移动元素
- Javascript集:任何覆盖元素之间比较的方法
- jqmobile列表视图中元素之间的间距相等
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- 如何在两个动画画布元素之间进行通信
- 同一元素的 this.id 值在浏览器之间是不同的
- 第一个元素和最后一个元素之间的连续循环
- 根据DOM,HTML元素的开始和结束标记之间的内容被称为属性.这个房产的名字是什么
- JavaScript/jQuery在两个iframe之间拖放元素
- 边距和输入元素边框之间的填充颜色
- 隐藏元素:Javascript属性和CSS样式之间的区别
- 使用AngularJS在Bootstrap选项卡之间移动DOM元素
- 在元素之间导航的Javascript