2011-12-13 16 views

Respuesta

18

getElementsByTagName es soportado por todos los navegadores modernos y todo el camino de vuelta 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 depende totalmente del caso de uso específico, no puede ser la solución más óptima. – zatatatata

-1

Trate de usar getElementsByTagName('a')

1

Algo como esto debería ser útil para Usted:

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

Es extraño que nadie haya ofrecido una solución alternativa que utilice eventos burbujeantes

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); 

Las ventajas de esta solución es que cuando se agrega dinámicamente otro anclaje, no es necesario para unirse específicamente a un evento para él, así que todos los enlaces siempre se disparará esto, incluso si se agregaron después de estas líneas fueron ejecutados. Esto está en contraste con todas las otras soluciones publicadas hasta ahora. Esta solución también es más óptima cuando tienes una gran cantidad de enlaces en tu página.

+0

Alguien recientemente agregó una respuesta más que agregará un montón de oyentes de eventos, pero no hará nada para los anclajes agregados al dom después de que se ejecuta el código. Un principio tan simple pero muchas personas parecen ignorarlo por completo. – HMR

+1

También creo que esta solución es mejor, porque agrega solo un evento, en lugar de agregar potencialmente decenas de eventos. Esta solución también es mejor, porque si dinámicamente agregas más enlaces, ¡también funcionará para ellos! – Ignas2526

+0

¡Es genial cuando alguien tiende a pensar profundamente! – hex494D49

1

mejor manera:

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

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