jQuery: selezionare gli attributi dei dati che non sono vuoti?


95

Sto cercando di selezionare tutti gli elementi che hanno un data-go-toattributo che non è vuoto.

Ho provato, $('[data-go-to!=""]')ma stranamente sembra che stia selezionando ogni singolo elemento della pagina se lo faccio.

Risposte:


76

provare

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

AGGIORNARE:

Per non portare nessuno fuori strada, questa risposta funzionerà nelle versioni precedenti di jQuery ma non è a prova di futuro. Dal momento che le risposte di @gmo e @ siva sembrano entrambe funzionare con le versioni successive, rimando alle loro risposte (e ti incoraggio a votare a favore) .... e ovviamente spero che tu abbia una giornata fantastica.


grazie, ha funzionato benissimo! Volevo selezionare solo gli elementi dell'immagine, quindi ho aggiunto $ (': not (img [data-go-to == ""]')
msanjay

2
Questo non seleziona tutti gli elementi che non hanno un attributo "data-to-go" vuoto? Quando il richiedente desidera che tutti gli elementi con quell'attributo non siano vuoti? (come si risolve la risposta di Siva Charan)
rodnaf

non ho davvero bisogno di virgolette doppie ... come in $('element:not([attribute=])'); // gets all of <element attribute="">o$(':not([attribute=])'); // gets all of <* attribute="">
Anthony Hatzopoulos

2
Questo ottiene ogni elemento per me, incluso quello che ha l'attributo di dati che sto cercando
Devil's Advocate,

Non sembra funzionare in Safari ma $('[data-go-to!=""]:[data-go-to]')funziona.
Dan

183

Proprio come ulteriore riferimento, e un aggiornamento (maggio'14) (ago'15) (settembre'16) (apr'17) (mar'18) (mar'19) ( maggio'20 ) ...
Risposta che funziona con:

Stringhe vuote:

Se il deve esistere e potrebbe avere un valore (o nessuno)attr

    jQuery("[href]");

Attributi mancanti:

Se potesse esistere e se esistesse, deve avere un valore attr

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

O entrambi:

Se deve esistere e deve avere un valore ... attr

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

PS : sono possibili più combinazioni ...


Controlla questo test in jsFiddle per esempi:


O qui in SO con questo frammento di codice .

* Snippet esegue jQuery v2.1.1


6
questo è. Dai un voto positivo a questo utente qui. le altre risposte più vecchie non funzionano per me. Ho usato il terzo esempio.
Valamas

Seconded @ Valamas-AUS
Adam Waite

Modifica: aggiunto lo snippet di codice SO, quindi puoi testarlo qui.
OGM

Questo è quello che funziona. $(':not([data-go-to=""])')non funziona più
Matthieu Charbonnier

1
Grazie per mantenere la risposta aggiornata
Anthony C

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

6
Questo funziona per stringhe vuote e attributi mancanti, perfetto
adamJLev

4
a partire da maggio 14 non funziona, dà Unrecognized Expressionerrore.
coding_idiot

7

Ha "data-attributename" e il suo valore non è vuoto:

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

Ha "data-attributename" vuoto o meno:

$('[data-attributename]')

Esempio di JS Fiddle


1
Questa è l'unica risposta che funziona ancora per me nel giugno 2015.
AlexioVay




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

Usando :not, .not(), :emptyecc controllerà solo se l'elemento stesso è, non l'attributo di dati vuoto. Per questo dovrai filtrare in base al valore degli attributi dei dati.

VIOLINO


1

Questo funziona per me

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

Queste sono però due iterazioni.
Jens


0

Questo funziona per me:

$('.data .title td[data-field!=""]')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.