すべての答えは正しいですが、他の誰もしなかったことを述べたいと思います。
jQuerydata
メソッドは、html5 データ属性の getter のように機能しますが、setter は data-* 属性を変更しません。
したがって、(コメントに記載されているように)データを手動で追加した場合は、css 属性セレクターを使用して要素を選択できます。
$('#element[data-data1=1]')
ただし、jQuery を介してデータを追加 (変更) した場合、上記の解決策は機能しません。
この失敗の例を次に示します。
var div = $('<div />').data('key','value');
alert(div.data('key') == div.attr('data-key'));// it will be false
したがって、回避策は、jQuery データ値が目的の値と一致することを確認して、コレクションをフィルター処理することです。
// replace key & value with own strings
$('selector').filter(function(i, el){
return $(this).data('key') == 'value';
});
したがって、これらの問題を克服するには、(jQuery のメソッドを介してattr
) html5 データセット属性を getter および setter として 使用する必要があります。
$('selector').attr('data-' + key, value);
または、jQuery internal をフィルタリングするカスタム式を使用できますdata
。
$.expr[':'].data = function(elem, index, m) {
// Remove ":data(" and the trailing ")" from the match, as these parts aren't needed:
m[0] = m[0].replace(/:data\(|\)$/g, '');
var regex = new RegExp('([\'"]?)((?:\\\\\\1|.)+?)\\1(,|$)', 'g'),
// Retrieve data key:
key = regex.exec( m[0] )[2],
// Retrieve data value to test against:
val = regex.exec( m[0] );
if (val) {
val = val[2];
}
// If a value was passed then we test for it, otherwise we test that the value evaluates to true:
return val ? $(elem).data(key) == val : !!$(elem).data(key);
};
そしてそれを次のように使用します:
$('selector:data(key,value)')
アップデート
このスレッドが数年前のものであることは知っていますが、いくつかのアクティビティがあるため、querySelector
dom API (jQuery を必要としない) を使用してこれを行うのは非常に簡単であることに言及する価値があります。
document.querySelectorAll('[attribute=value]')