Wybierz elementy, które wcześniej ustawiłem jquery.data();
tzn. Wybierz wszystkie elementy, .data('myAttr')
które zostały już ustawione.
ROZWIĄZANIE
Jsfiddle do zaprezentowania to Fiddle
Wybierz elementy, które wcześniej ustawiłem jquery.data();
tzn. Wybierz wszystkie elementy, .data('myAttr')
które zostały już ustawione.
ROZWIĄZANIE
Jsfiddle do zaprezentowania to Fiddle
Odpowiedzi:
Mógłbyś
$('[data-myAttr!=""]');
to zaznacza wszystkie elementy, które mają atrybut data-myAttr
różny od „” (więc musi być ustawiony);
możesz też użyć filter ()
$('*').filter(function() {
return $(this).data('myAttr') !== undefined;
});
Najlepszym i najprostszym sposobem ich wybrania jest:
$('[data-myAttr]')
Więcej informacji:
Przetestowałem wiele rzeczy.
Używanie $('[data-myAttr!=""]')
nie działa we wszystkich przypadkach. Bo elementy, które nie mają data-myAttr
zbioru, będą miały swoje data-myAttr
równe undefined
i $('[data-myAttr!=""]')
te też będą wybierać, co jest niepoprawne.
Możesz użyć filtra () :
var elements = $("*").filter(function() {
return $(this).data("myAttr") !== undefined;
});
$('[data-myAttr]')
?
data()
, że forma pobierająca rzeczywiście czyta data-
atrybuty HTML5 , ale jej forma ustawiająca nie tworzy ich ani nie aktualizuje.
Możesz użyć tego rozszerzenia jQuery Selector: Zapytanie o dane elementu
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
Możesz użyć interfejsu użytkownika JQuery z selektorem: data ()
Wybiera elementy, które mają dane przechowywane pod określonym kluczem.
Sprawdź na przykład ten plik jsfiddle
Aby dopasować wszystkie elementy .data('myAttr')
, możesz użyć
var matches = $(':data(myAttr)');
Powinno to działać zarówno w przypadku elementów z data-
atrybutami, jak i elementów z danymi przechowywanymi przy użyciu funkcji $.data()
ponieważ
Od wersji jQuery 1.4.3 atrybuty danych HTML 5 będą automatycznie pobierane do obiektu danych jQuery.
Ale to nie działa zbyt dobrze. Sprawdź to jsfiddle, a zobaczysz, że przy drugim wywołaniu selektora powinien on pasować do 2 elementów i pasuje tylko do jednego. Jest to spowodowane "błędem" w bibliotece jquery-ui.
Jest to pobierane z podstawowego pliku 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 ] );
}
});
Jak widać, używają $.data(elem, match)
zamiast tego, $(elem).data(match)
co powoduje, że pamięć podręczna nie jest aktualizowana w przypadku, gdy żądasz elementów z data-
atrybutami. Jeśli element został przetestowany pod kątem data()
przechowywania, działa to dobrze, ale jeśli nie, nie zostanie uwzględniony w wynikowych dopasowaniach.
Może to wcale nie być błąd, jeśli chcesz dopasować tylko elementy do informacji o danych ustawionych przez Ciebie, ale jeśli nie, masz dwie opcje.
Nie używaj jquery-ui i rozszerzaj swój własny pseudo-selektor $(: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]);
}
});
Użyj jquery-ui z :data
pseudoselektorem i połącz wyniki wyboru, [data-myAttr]
aby uwzględnić te, które mogą zostać pominięte
var matches = $(':data(myAttr)', '[data-myAttr]')
Wybierz elementy, które wcześniej ustawiłemjquery.data();
Pytanie dotyczy znalezienia wszystkich elementów z określonym kluczem, a nie żadnych danych.
Spróbuj wykorzystać 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-*
ustawiony atrybut, a także jQuery.data()
ustawiony?
$('[data-myAttr]')