2011-12-13 35 views

Trả lời

18

getElementsByTagName được hỗ trợ bởi tất cả các trình duyệt hiện đại và tất cả các cách trở lại 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 hoàn toàn phụ thuộc vào việc sử dụng hợp cụ thể, có thể không phải là giải pháp tối ưu nhất. – zatatatata

-1

Hãy thử sử dụng getElementsByTagName('a')

1

Something như thế này sẽ có ích cho bạn:

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

Thật lạ khi không ai cung cấp giải pháp thay thế sử dụng sự kiện 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); 

Các ưu của giải pháp này là khi bạn tự động thêm neo khác, bạn không cần phải đặc biệt gắn một sự kiện vào nó, vì vậy tất cả các liên kết này sẽ luôn bắn này, ngay cả khi họ đã được thêm vào sau khi những dòng này Đã được thực hiện. Điều này trái ngược với tất cả các giải pháp khác được đăng cho đến thời điểm này. Giải pháp này cũng tối ưu hơn khi bạn có một số lượng lớn các liên kết trên trang của mình.

+0

Ai đó gần đây đã thêm một câu trả lời khác sẽ thêm vô số người nghe sự kiện nhưng sẽ không làm bất cứ điều gì cho neo được thêm vào dom sau khi mã thực thi. Một nguyên tắc đơn giản như vậy nhưng rất nhiều người dường như hoàn toàn không biết. – HMR

+1

Tôi cũng nghĩ rằng giải pháp này là tốt hơn, bởi vì nó chỉ thêm một sự kiện, so với khả năng thêm hàng chục sự kiện. Giải pháp này cũng tốt hơn, bởi vì nếu bạn tự động thêm nhiều liên kết, nó cũng sẽ làm việc cho chúng! – Ignas2526

+0

Thật tuyệt vời khi ai đó có xu hướng suy nghĩ sâu sắc! – hex494D49

1

cách tốt hơn:

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

item.forEach(link => { 
    link.addEventListener("click", function() { 
    link.classList.add("nav__item--active"); 
    }); 
}); 
Các vấn đề liên quan