2011-12-13 16 views

risposta

18

getElementsByTagName è supportato da tutti i browser moderni e tutta la strada fino a IE 6

var elements = document.getElementsByTagName('a'); 
for(var i = 0, len = elements.length; i < len; i++) { 
    elements[i].onclick = function() { 
     // stuff 
    } 
} 
+5

@ Márcio dipende totalmente l'uso specifico caso, potrebbe non essere la soluzione più ottimale. – zatatatata

-1

Provare a utilizzare getElementsByTagName('a')

1

Qualcosa del genere dovrebbe essere utile per voi:

var elements = document.getElementsByTagName("a"), 
    i, 
    len, 
    el; 

for (i = 0, len = elements.length; i < len; i++) { 
    el = elements[i]; 

    // Do what you need on the element 'el' 
} 
3
function linkClickHandler(a) { 
    console.log(a.host); 
} 

var links = document.getElementsByTagName('a'); 
for (var i = 0; i < links.length; i++) links[i].onclick = function() { 
    linkClickHandler(links[i]); 
} 
59

È strano che nessuno abbia offerto una soluzione alternativa che utilizza l'evento bubbling

function callback(e) { 
    var e = window.e || e; 

    if (e.target.tagName !== 'A') 
     return; 

    // Do something 
} 

if (document.addEventListener) 
    document.addEventListener('click', callback, false); 
else 
    document.attachEvent('onclick', callback); 

I pro di questa soluzione è che quando si aggiunge dinamicamente un'altra ancora, non c'è bisogno di legarsi in modo specifico un evento ad esso, in modo da tutti i link sarà attivo sempre presente, anche se sono stati aggiunti dopo queste righe sono stati giustiziati Questo è in contrasto con tutte le altre soluzioni postate finora. Questa soluzione è anche più ottimale quando si dispone di un numero elevato di collegamenti nella pagina.

+0

Qualcuno ha recentemente aggiunto un'altra risposta che aggiungerà un sacco di listener di eventi ma non farà nulla per gli ancore aggiunti al dom dopo l'esecuzione del codice. Un principio così semplice, ma così tante persone sembrano essere completamente all'oscuro. – HMR

+1

Penso anche che questa soluzione sia migliore, perché aggiunge solo un evento, potenzialmente aggiungendo decine di eventi. Questa soluzione è anche migliore, perché se aggiungi dinamicamente più link, funzionerà anche per loro! – Ignas2526

+0

È fantastico quando qualcuno tende a pensare profondamente! – hex494D49

1

modo migliore:

const item = document.querySelectorAll(".nav__item"); 

item.forEach(link => { 
    link.addEventListener("click", function() { 
    link.classList.add("nav__item--active"); 
    }); 
}); 
Problemi correlati