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.