jQuery: Datenattribute auswählen, die nicht leer sind?


95

Ich versuche, alle Elemente auszuwählen, deren data-go-toAttribut nicht leer ist.

Ich habe es versucht, $('[data-go-to!=""]')aber seltsamerweise scheint es, als würde ich jedes einzelne Element auf der Seite auswählen, wenn ich das tue.

Antworten:


76

Versuchen

$(':not([data-go-to=""])')

AKTUALISIEREN:

Um niemanden in die Irre zu führen, funktioniert diese Antwort in älteren Versionen von jQuery, ist jedoch nicht zukunftssicher. Da die Antworten von @gmo und @ siva anscheinend mit späteren Versionen funktionieren, schiebe ich ihre Antworten zurück (und ermutige Sie, sie zu verbessern) ... und hoffe natürlich, dass Sie einen fantastischen Tag haben.


danke, das hat super geklappt! Ich wollte nur Bildelemente auswählen, also fügte ich $ (': not (img [data-go-to == ""]')
msanjay

2
Wählt dies nicht alle Elemente aus, die kein leeres Attribut "Daten zum Mitnehmen" haben? Wann möchte der Fragesteller alle Elemente mit diesem Attribut, die nicht leer sind? (als Siva
Charans

brauche auch keine doppelten Anführungszeichen ... wie in $('element:not([attribute=])'); // gets all of <element attribute="">oder$(':not([attribute=])'); // gets all of <* attribute="">
Anthony Hatzopoulos

2
Dies bringt jedes Element für mich, einschließlich desjenigen, das das Datenattribut hat, das ich suche
Devil's Advocate

Scheint in Safari nicht zu funktionieren, $('[data-go-to!=""]:[data-go-to]')tut es aber .
Dan

183

Nur als weitere Referenz und ein aktuelles (14. Mai) (15. August) (16. September) ( 17. April) (18. März) (19. März) (19. Mai ) ... 20. Mai ...
Antwort, die funktioniert mit:

Leere Zeichenfolgen:

Wenn das existieren muss & irgendeinen Wert haben könnte (oder überhaupt keinen)attr

    jQuery("[href]");

Fehlende Attribute:

Wenn existieren könnte & wenn existieren, muss ein Wert haben attr

    jQuery("[href!='']");

Oder beides:

Wenn es existieren muss und einen Wert haben muss ... attr

    jQuery("[href!=''][href]");

PS : Weitere Kombinationen sind möglich ...


Überprüfen Sie diesen Test in jsFiddle für Beispiele:


Oder hier in SO mit diesem Code-Snippet .

* Snippet führt jQuery v2.1.1 aus


6
Das ist es. Stimmen Sie diesen Benutzer hier ab. Die anderen älteren Antworten funktionieren bei mir nicht. Ich habe das dritte Beispiel verwendet.
Valamas

Abgeordnet @ Valamas-AUS
Adam Waite

Bearbeiten: SO Code Snippet hinzugefügt, sodass Sie es hier testen können.
GVO

Dies ist derjenige, der funktioniert. $(':not([data-go-to=""])')funktioniert nicht mehr
Matthieu Charbonnier

1
Vielen Dank für die Aktualisierung der Antwort
Anthony C

19
$('[data-go-to!=""]:[data-go-to]').each(function() {
    // Do Your Stuff
});​

6
Dieser funktioniert für leere Zeichenfolgen und fehlende Attribute, perfekt
adamJLev

4
ab Mai'14 funktioniert nicht, gibt Unrecognized ExpressionFehler.
Coding_idiot

7

Hat 'data-attributename' und sein Wert ist nicht leer:

$('[data-attributename]:not([data-attributename=""])')

Hat 'data-attributename' leer oder nicht:

$('[data-attributename]')

JS Fiddle Beispiel


1
Dies ist die einzige Antwort, die im Juni 2015 noch für mich funktioniert.
AlexioVay




2
$('[data-go-to]').filter(function() {
    return $(this).data('go-to')!="";
});

Mit :not, .not(), :emptywird etc nur prüfen , ob das Element selbst leer ist, nicht das Datenattribut. Dazu müssen Sie nach dem Wert der Datenattribute filtern.

GEIGE


1

Das funktioniert bei mir

$('[attributename]').filter('[attributename!=""]')

Dies sind jedoch zwei Iterationen.
Jens


0

Das funktioniert bei mir:

$('.data .title td[data-field!=""]')
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.