2010-04-22 14 views
113

Può cortesemente dirmi se c'è qualche API DOM, che ricerca di un elemento con data nome di attributo e valore di attributo:Trovare un elemento nel DOM sulla base di un valore di attributo

Qualcosa di simile:

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

Duplicare se siete alla ricerca di un Jquery Sol: http://stackoverflow.com/questions/696968/jquery-v1-3-2-find-element- by-attribute – Rajat

+6

Puoi aggiornare la risposta accettata alla soluzione moderna, la risposta di Wojtek? –

risposta

77

Aggiornamento: Negli ultimi anni il paesaggio è cambiato drasticamente. È ora possibile utilizzare in modo affidabile querySelector e querySelectorAll, vedere Wojtek's answer per come procedere.

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


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

You do something like this, looping through elements and checking the attribute

Se una libreria come jQuery è un'opzione, si può fare un po 'più facile, come questo:

$("[myAttribute=value]") 

Se il valore non è una valida CSS identifier (ha spazi o punteggiatura in esso, ecc), è necessario citazioni intorno al valore (possono essere singole o doppie):

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

si può anche fare start-with, ends-with, contains, ecc ... there are several options for the attribute selector.

+2

L'API DOM JavaScript in realtà vanilla funziona abbastanza bene sui browser moderni –

+2

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

+1

Penso che jQuery (o equivalente) sia probabilmente il più facile soprattutto per essere compatibile con browser incrociati senza dover sapere cosa richiede. –

197

Browser moderni supporto nativo querySelectorAll modo da poter fare:

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

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

dettagli circa la compatibilità del browser:

È possibile utilizzare jQuery per supportare i browser obsoleti (IE9 e più):

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

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

+0

Sembra che il valore non possa essere un numero o "SyntaxError: è stata specificata una stringa non valida o illegale" – jeum

+2

Il selettore deve essere : ''[data-foo =" valore "]'' –

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

P.S. se si sa esattamente elemento-tipo, si aggiungono 3 ° parametro (cioè div, a, p ...etc...):

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

ma in un primo momento, definire 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]; } 
    } 
} 

P.S. aggiornato per raccomandazioni commenti.

+3

Perché?! In questo modo stai eseguendo il ciclo di tutti i tuoi DOM – Arthur

+0

Questo sembra fantastico - se hai solo 5 elementi sulla pagina. – sheriffderek

+0

@ Arthur quale è la vostra soluzione? –

1

Ecco un esempio, Come cercare le immagini in un documento attributo src:

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

Possiamo usare selettore di attributo in DOM utilizzando i metodi document.querySelector() e document.querySelectorAll().

per il vostro:

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

e utilizzando querySlectorAll():

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

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

\' qui rappresenta il carattere di escape e rappresenta infine selector[myAttrubute = aValue] proprio come in "CSS".

più su "CSS" selettori di attributo in https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors

Problemi correlati