以前に設定した要素を選択 jquery.data();
つまり、.data('myAttr')
すでに設定されているすべての要素を選択します。
解決
demostrateするjsfiddleは フィドルです
以前に設定した要素を選択 jquery.data();
つまり、.data('myAttr')
すでに設定されているすべての要素を選択します。
解決
demostrateするjsfiddleは フィドルです
回答:
あなたができる
$('[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()
'のゲッターフォームが実際にHTML5 data-
属性を読み取るが、そのセッターフォームはそれらを作成も更新もしないためです。
このjQueryセレクター拡張を使用できます:要素データのクエリ
$(':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回呼び出されたときに、2つの要素に一致し、1つだけに一致していることがわかります。これは、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()
保存がテストされている場合、これは適切に機能しますが、そうでない場合、結果の一致には含まれません。
要素だけを自分で設定したデータ情報と照合したいのであれば、これはまったくバグではないかもしれませんが、そうでなければ、2つのオプションが残されます。
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]);
}
});
:data
疑似セレクターでjquery-uiを使用し、選択の結果を結合して、[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()
か?
$('[data-myAttr]')