Wszystkie odpowiedzi są poprawne, ale chcę powiedzieć coś, czego nikt inny nie zrobił.
Metoda jQuery data
działa jak getter dla atrybutów danych html5, ale ustawnik nie zmienia atrybutu data- *.
Tak więc, jeśli ręcznie dodane dane (jak wskazano w komentarzu), a następnie można użyć selektora atrybutu css, aby wybrać element:
$('#element[data-data1=1]')
ale jeśli zostały dodane (zmieniony) dane poprzez jQuery, powyższe rozwiązanie nie będzie działać.
Oto przykład tego niepowodzenia:
var div = $('<div />').data('key','value');
alert(div.data('key') == div.attr('data-key'));// it will be false
Więc rozwiązaniem jest czasowe gromadzenie sprawdzając wartość danych jQuery dopasować żądaną jeden:
// replace key & value with own strings
$('selector').filter(function(i, el){
return $(this).data('key') == 'value';
});
Tak więc, w celu przezwyciężenia tych kwestie, trzeba użyć atrybutów html5 zestawu danych (poprzez jQuery za attr
Methos) jako pobierające i ustawiające:
$('selector').attr('data-' + key, value);
lub użyć niestandardowego wyrażenie, które filtruje jQuery wewnętrzny 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);
};
i używać go lubię:
$('selector:data(key,value)')
Może związanej http://stackoverflow.com/questions/13094777/find-elements -by-custom-data-attribute-value-wartość/13094850 # 13094850. – pimvdb
[Nie powinieneś ustawiać atrybutu '[data - *]' z poziomu JavaScript] (http://stackoverflow.com/questions/7261619/jquery-data-vs-attr/7262427#7262427). – zzzzBov