所有的答案都正確,但我想陳述其他人沒有做過的事情。
jQuery data
方法的作用類似於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';
});
,爲了克服這些問題,你需要使用HTML5數據集屬性(通過jQuery的attr
methos)的getter和setter方法:
$('selector').attr('data-' + key, value);
或者您可以使用過濾器的jQuery內部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)')
可能與http://stackoverflow.com/questions/13094777/find-elements逐定製數據屬性值/ 13094850#13094850。 – pimvdb
[你不需要在JavaScript中設置'[data - *]'屬性](http://stackoverflow.com/questions/7261619/jquery-data-vs-attr/7262427#7262427)。 – zzzzBov