选择我之前设置的元素 jquery.data();
即选择所有.data('myAttr')
已设置的元素。
解
演示的jsfiddle是 Fiddle
Answers:
你可以做
$('[data-myAttr!=""]');
这将选择具有data-myAttr
不等于'' 属性的所有元素(因此必须已设置);
您也可以使用filter()
$('*').filter(function() {
return $(this).data('myAttr') !== undefined;
});
选择它们的最佳和简单方法是:
$('[data-myAttr]')
更多信息:
我测试了很多东西。
使用$('[data-myAttr!=""]')
并非在所有情况下都有效。因为没有一个元素data-myAttr
集,都会有自己data-myAttr
等于undefined
和$('[data-myAttr!=""]')
会选择那些为好,这是不正确。
您可以使用filter():
var elements = $("*").filter(function() {
return $(this).data("myAttr") !== undefined;
});
$('[data-myAttr]')
?
data()
的getter表单确实读取了HTML5 data-
属性,但是其setter表单既不创建也不更新它们。
您可以使用以下jQuery Selector扩展:查询元素数据
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
您可以将JQuery UI与:data()选择器一起使用
选择具有存储在指定键下的数据的元素。
查看此jsfiddle示例
要获取所有匹配的元素,.data('myAttr')
您可以使用
var matches = $(':data(myAttr)');
这对于具有data-
属性的元素和具有使用来存储数据的元素都应该起作用,$.data()
因为
从jQuery 1.4.3开始,HTML 5的data-属性将自动拉入jQuery的数据对象。
但这不是很好。检查此jsfiddle,您将看到第二次调用选择器时,它应该匹配2个元素,并且仅匹配一个。这是由于jquery-ui库中的“错误”。
这取自核心jquery-ui文件。
$.extend( $.expr[ ":" ], {
data: $.expr.createPseudo ?
$.expr.createPseudo(function( dataName ) {
return function( elem ) {
return !!$.data( elem, dataName );
};
}) :
// support: jQuery <1.8
function( elem, i, match ) {
return !!$.data( elem, match[ 3 ] );
}
});
如您所见,它们正在使用$.data(elem, match)
代替$(elem).data(match)
,这导致在请求具有data-
属性的元素的情况下不会更新缓存。如果该元素已经过data()
存储测试,则效果很好,但如果不成功,则不会包含在结果匹配中。
如果您想要的是仅将元素与您设置的数据信息进行匹配,那么这可能根本不是一个错误,但是如果您不想要,则有两个选择。
不要使用jquery-ui并扩展自己的伪选择器 $(:mydata(myAttr))
$.extend($.expr[":"], {
mydata: $.expr.createPseudo ?
$.expr.createPseudo(function(dataName) {
return function(elem) {
return !!$(elem).data(dataName);
};
}) : function(elem, i, match) {
return !!$(elem).data(match[3]);
}
});
将jquery-ui与:data
伪选择器[data-myAttr]
一起使用,并加入选择结果以包括可能被跳过的结果
var matches = $(':data(myAttr)', '[data-myAttr]')
选择我之前设置的元素jquery.data();
问题是要查找具有特定键的所有元素,而不是任何数据。
尝试利用 jQuery.data()
$(".myClass").each(function(i){
if( i % 2 == 0 ){
$(this).data("myAttr",i + 1);
}
});
var res = $(".myClass").map(function(i) {
console.log($(this).data("myAttr"));
return $.data(this, "myAttr") !== undefined ? this : null
});
console.log(res);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div class="myClass">1</div>
<div class="myClass">2</div>
<div class="myClass">3</div>
<div class="myClass">4</div>
<div class="myClass">5</div>
jsfiddle http://jsfiddle.net/xynZA/142/
html
data-*
属性set和jQuery.data()
set的元素?
$('[data-myAttr]')