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

96

Próbuję wybrać wszystkie elementy, które mają data-go-toatrybut, który nie jest pusty.

Próbowałem, $('[data-go-to!=""]')ale, co dziwne, wydaje się, że wybiera każdy element na stronie, jeśli to zrobię.

Shpigford
źródło

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ń.

Benjamin Oman
źródło
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

gmo
źródło
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
});​
Siva Charan
źródło
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

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

Nie jestem pewien co do prostego selektora, ale możesz użyć filter():

$('[data-go-to]').filter(
    function(){
        return ($(this).attr('data-go-to').length > 0);
    });

Demo JS Fiddle .

Bibliografia:

David mówi, że przywróć Monikę
źródło
4

Zgodnie z dokumentacją powinno to wystarczyć

:not([attr="value"])

PRÓBNY

Mam nadzieję że to pomoże

Dhiraj
źródło
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

adeneo
źródło
1

To działa dla mnie

$('[attributename]').filter('[attributename!=""]')
Mardok
źródło
Są to jednak dwie iteracje.
Jens
0

Spróbuj tego :

$('[data-go-to:not(:empty)]')
Pascal Boutin
źródło
1
Nie idź. "Syntax error, unrecognized expression: [data-go-to:not(:empty)]"
Shpigford
api.jquery.com/empty-selector api.jquery.com/not-selector Zgodnie z tym, przypuszczam, że zadziała, smutno, to byłoby czyste rozwiązanie!
Pascal Boutin
0

To działa dla mnie:

$('.data .title td[data-field!=""]')
VK
źródło