jQuery: Wybierz atrybuty danych, które nie są puste?


Odpowiedzi:


77

próbować

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

AKTUALIZACJA:

Aby nikogo nie sprowadzić na manowce, ta odpowiedź będzie działać w starszych wersjach jQuery, ale nie jest przyszłościowa. Ponieważ odpowiedzi @gmo i @ siva wydają się działać z późniejszymi wersjami, odkładam (i zachęcam cię do głosowania) ich odpowiedzi ... i oczywiście mam nadzieję, że masz fantastyczny dzień.


dzięki, to działało świetnie! Chciałem zaznaczyć tylko elementy obrazu, więc dodałem $ (': not (img [data-go-to == ""]')
msanjay

2
Czy to nie powoduje wybrania wszystkich elementów, które nie mają pustego atrybutu „dane do wykorzystania”? Kiedy pytający chce wszystkie elementy z tym atrybutem, które nie są puste? (zgodnie z odpowiedzią Sivy Charana)
rodnaph,

naprawdę nie potrzebuję żadnych podwójnych cudzysłowów ... jak w $('element:not([attribute=])'); // gets all of <element attribute="">lub$(':not([attribute=])'); // gets all of <* attribute="">
Anthony Hatzopoulos

2
To dostaje dla mnie każdy element, w tym ten, który ma atrybut danych, którego szukam
Devil's Advocate

Wydaje się, że nie działa w Safari, ale $('[data-go-to!=""]:[data-go-to]')tak.
Dan

186

Jako dalsze odniesienie i aktualne (maj'14) (sierpień'15) (wrz'16) (kwi'17) (mar'18) (mar'19) ( maj'20 ) ...
Odpowiedź, która działa z:

Puste ciągi:

Jeśli musi istnieć i może mieć jakąkolwiek wartość (lub wcale)attr

    jQuery("[href]");

Brakujące atrybuty:

Jeśli mogłoby istnieć, a jeśli istnieje, musi mieć jakąś wartość attr

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

Lub obydwa:

Jeśli musi istnieć i musi mieć jakąś wartość ... attr

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

PS : więcej kombinacji jest możliwych ...


Sprawdź ten test w jsFiddle, aby zobaczyć przykłady:


Lub tutaj w SO z tym fragmentem kodu .

* Snippet korzysta z jQuery v2.1.1


6
to jest to. Głosuj na tego użytkownika tutaj. inne starsze odpowiedzi nie działają dla mnie. Posłużyłem się trzecim przykładem.
Valamas,

Oddelegowany @ Valamas-AUS
Adam Waite

Edycja: Dodano fragment kodu SO, więc możesz go przetestować tutaj.
gmo

To jest ten, który działa. $(':not([data-go-to=""])')już nie działa
Matthieu Charbonnier

1
Dzięki za aktualizację odpowiedzi
Anthony C

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

6
Ten działa dla pustych ciągów i brakujących atrybutów, idealnie
adamJLev

4
od 14 maja nie działa, podaje Unrecognized Expressionbłąd.
coding_idiot

7

Zawiera atrybut „data-attributeame”, a jego wartość nie jest pusta:

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

Czy atrybut „nazwa-atrybutu danych” jest pusty lub nie:

$('[data-attributename]')

Przykład JS Fiddle


1
To jedyna odpowiedź, która nadal działa dla mnie w czerwcu 2015 r.
AlexioVay




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

Korzystanie z :not, .not(), :emptyetc będzie sprawdzać tylko wtedy, gdy sam element jest pusty, nie atrybut danych. W tym celu będziesz musiał filtrować na podstawie wartości atrybutów danych.

SKRZYPCE


1

To działa dla mnie

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

Są to jednak dwie iteracje.
Jens


0

To działa dla mnie:

$('.data .title td[data-field!=""]')
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.