Trova un elemento in DOM in base a un valore di attributo


252

Potete per favore dirmi se esiste qualche API DOM che cerca un elemento con il nome e il valore dell'attributo indicati:

Qualcosa di simile a:

doc.findElementByAttribute("myAttribute", "aValue");

1
Duplica se stai cercando un Sol Jquery: stackoverflow.com/questions/696968/…
Rajat

13
Potete per favore aggiornare la risposta accettata alla soluzione moderna, la risposta di Wojtek?
Nick Craver

Risposte:


165

Aggiornamento: negli ultimi anni il panorama è cambiato drasticamente. Ora puoi utilizzare in modo affidabile querySelectore querySelectorAll, vedi la risposta di Wojtek per sapere come fare.

Non c'è bisogno di una dipendenza jQuery ora. Se stai usando jQuery, fantastico ... se non lo sei, non devi fare affidamento solo sulla selezione degli elementi per attributi.


Non c'è un modo molto breve per farlo in javascript alla vaniglia, ma ci sono alcune soluzioni disponibili.

Fai qualcosa del genere, eseguendo il ciclo tra gli elementi e controllando l'attributo

Se una libreria come jQuery è un'opzione, puoi farlo un po 'più facilmente, in questo modo:

$("[myAttribute=value]")

Se il valore non è un identificatore CSS valido (contiene spazi o punteggiatura, ecc.), Sono necessarie virgolette attorno al valore (possono essere singole o doppie):

$("[myAttribute='my value']")

Si può anche fare start-with, ends-with, contains, ecc ... ci sono diverse opzioni per il selettore di attributo .


6
In realtà, l'API DOM JavaScript di vaniglia funziona abbastanza bene sui browser moderni
Wojtek Kruszewski,

2
@WojtekKruszewski non nel 2010 :) Ho fatto l'aggiornamento però, spero che il richiedente si sposterà l'accettazione per noi - vogliamo informazioni aggiornate là fuori.
Nick Craver

1
Penso che jQuery (o equivalente) sia probabilmente il più semplice soprattutto per essere compatibile con più browser senza dover sapere cosa richiede.
Alexis Wilke,

1
Continuo a ricevere un array vuoto! Sto cercando di afferrare un file SVG tramite l'attributo d e sto provando $ ("[d = percorso]"); dove "percorso" è una variabile che contiene l'attributo d specifico di cui ho bisogno. Qualcuno ha provato a farlo con percorsi svg?
tx291,

438

I browser moderni supportano nativi in querySelectorAllmodo da poter fare:

document.querySelectorAll('[data-foo="value"]');

https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll

Dettagli sulla compatibilità del browser:

È possibile utilizzare jQuery per supportare browser obsoleti (IE9 e precedenti):

$('[data-foo="value"]');

2
per concretizzare la definizione "moderna": caniuse.com/#search=querySelectorAll
serhio

Sembra che il valore non possa essere un numero oSyntaxError: An invalid or illegal string was specified
jeum

3
Il selettore dovrebbe essere:'[data-foo="value"]'
Yotam Omer,

1
Qualche nota sulla perfomance? È più veloce dell'iterazione su tutti i nodi?
Stepan Yakovenko,

1
Che cos'è "data-foo" ... e dove è andato "myAttribute" in questo esempio?
oo_dev il

38

Possiamo usare il selettore di attributi in DOM usando document.querySelector()e document.querySelectorAll()metodi.

per i tuoi:

document.querySelector("selector[myAttribute='aValue']");

e usando querySlectorAll():

document.querySelectorAll("selector[myAttribute='aValue']");

In querySelector()e querySelectorAll()metodi possiamo selezionare oggetti come selezioniamo in "CSS".

Maggiori informazioni sui selettori di attributi "CSS" in https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors


Ho dovuto rimuovere le virgolette interne come questo document.querySelectorAll ("selector [myAttribute = aValue]");
Matjaz Hirsman,

20
FindByAttributeValue("Attribute-Name", "Attribute-Value");   

ps se conosci il tipo esatto di elemento, aggiungi il terzo parametro (es. div, a, p ...etc...):

FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");   

ma all'inizio, definisci questa funzione:

function FindByAttributeValue(attribute, value, element_type)    {
  element_type = element_type || "*";
  var All = document.getElementsByTagName(element_type);
  for (var i = 0; i < All.length; i++)       {
    if (All[i].getAttribute(attribute) == value) { return All[i]; }
  }
}

ps aggiornato per raccomandazioni commenti.


6
Perché ?! In questo modo esegui il looping di tutto il DOM
Arthur,

3
Sembra fantastico - se hai solo 5 elementi nella pagina.
Sheriffderek,

2
document.querySelectorAll('[data-foo="value"]');come proposto da @Wojtek Kruszewski sul tendalino accettato.
Arthur,

7

Ecco un esempio, Come cercare immagini in un documento in base all'attributo src:

document.querySelectorAll("img[src='https://pbs.twimg.com/profile_images/........jpg']");


0

Usa selettori di query, esempi:

document.querySelectorAll(' input[name], [id|=view], [class~=button] ')

input[name]Inserisce elementi con nameproprietà.

[id|=view]Elementi con ID che iniziano con view-.

[class~=button]Elementi con la buttonclasse.

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.