Wählen Sie Elemente aus, mit denen ich zuvor festgelegt habe jquery.data();
dh Wählen Sie alle Elemente aus, die .data('myAttr')
bereits festgelegt wurden.
LÖSUNG
Eine jsfiddle zum Demostrieren ist Fiddle
Wählen Sie Elemente aus, mit denen ich zuvor festgelegt habe jquery.data();
dh Wählen Sie alle Elemente aus, die .data('myAttr')
bereits festgelegt wurden.
LÖSUNG
Eine jsfiddle zum Demostrieren ist Fiddle
Antworten:
Du könntest es tun
$('[data-myAttr!=""]');
Dadurch werden alle Elemente ausgewählt, deren Attribut data-myAttr
ungleich '' ist (es muss also festgelegt worden sein).
Sie können auch filter () verwenden
$('*').filter(function() {
return $(this).data('myAttr') !== undefined;
});
Der beste und einfachste Weg, sie auszuwählen, ist:
$('[data-myAttr]')
Mehr Informationen:
Ich habe viele Dinge getestet.
Die Verwendung $('[data-myAttr!=""]')
funktioniert nicht in allen Fällen. Weil Elemente, die keine data-myAttr
Menge haben, data-myAttr
gleich undefined
und sind$('[data-myAttr!=""]')
auch diese auswählen, was falsch ist.
Sie können filter () verwenden :
var elements = $("*").filter(function() {
return $(this).data("myAttr") !== undefined;
});
$('[data-myAttr]')
?
data()
Getter-Formular zwar die HTML5- data-
Attribute liest, das Setter-Formular sie jedoch weder erstellt noch aktualisiert.
Sie können diese jQuery Selector-Erweiterung verwenden: Abfragen von Elementdaten
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
Sie können die JQuery-Benutzeroberfläche mit dem Selektor: data () verwenden
Wählt Elemente aus, deren Daten unter dem angegebenen Schlüssel gespeichert sind.
Überprüfen Sie diese jsfiddle für ein Beispiel
Um alle passenden Elemente zu erhalten .data('myAttr')
, können Sie verwenden
var matches = $(':data(myAttr)');
Dies sollte sowohl für Elemente mit data-
Attributen als auch für Elemente mit Daten funktionieren, die mit $.data()
weil gespeichert wurden
Ab jQuery 1.4.3 werden HTML 5-Datenattribute automatisch in das Datenobjekt von jQuery gezogen.
Das funktioniert aber nicht sehr gut. Überprüfen Sie diese jsfiddle und Sie werden sehen, dass der Selektor beim zweiten Aufruf mit 2 Elementen übereinstimmen sollte und nur mit einem übereinstimmt. Dies liegt an einem "Fehler" in der jquery-ui-Bibliothek.
Dies wird aus der Kerndatei jquery-ui übernommen.
$.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 ] );
}
});
Wie Sie sehen, werden sie $.data(elem, match)
stattdessen verwendet $(elem).data(match)
, wodurch der Cache nicht aktualisiert wird, wenn Sie Elemente mit data-
Attributen anfordern . Wenn das Element getestet wurdedata()
Speicherung funktioniert dies gut, aber wenn nicht, wird es nicht in die resultierenden Übereinstimmungen aufgenommen.
Dies ist möglicherweise überhaupt kein Fehler, wenn Sie nur Elemente mit den von Ihnen festgelegten Dateninformationen abgleichen möchten. Andernfalls stehen Ihnen zwei Optionen zur Verfügung.
Verwenden Sie nicht jquery-ui und erweitern Sie Ihren eigenen 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]);
}
});
Verwenden Sie jquery-ui mit dem :data
Pseudoselector und fügen Sie die Ergebnisse der Auswahl hinzu [data-myAttr]
, um diejenigen einzuschließen , die möglicherweise übersprungen werden
var matches = $(':data(myAttr)', '[data-myAttr]')
Wählen Sie Elemente aus, mit denen ich zuvor festgelegt habejquery.data();
Die Frage ist, alle Elemente mit einem bestimmten Schlüssel und keine Daten zu finden.
Versuchen Sie es mit 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-*
Attribut als auch ein jQuery.data()
Satz festgelegt wurde?
$('[data-myAttr]')