2016-05-11 2 views
-4

Могу ли я добавить анимацию ко всем ссылкам на странице?JavaScript: getElementsByTagName()

Здесь код

var words = document.links; 

    words.onmouseover = function() { 
    words.classList.toggle("tada"); 
}; 

Спасибо заранее.

+2

Этот код должен работать. Он должен касаться только первого якоря на странице, но его использование querySelector вместо querySelectorAll или getElementsByTagName. – Quentin

+1

Я не вижу, чтобы вы использовали 'getElementsByTagName' или' document.querySelectorAll' в любом месте! –

+0

Потенциально дубликат http://stackoverflow.com/q/6967297/218196 и http://stackoverflow.com/q/22727403/218196 –

ответ

2

В getElementsByTagName('a') и querySelectorAll('a') функции должны работать, как ожидалось возвращение либо HTMLCollection или NodeList соответственно, оба из которых потребуют от вас выполнить итерацию, чтобы на самом деле настроить обработчик событий:

// Get your links 
var links = document.getElementsByTagName('a'); 
// Iterate through them and set up your event handlers 
for(var l = 0; l < links.length; l++){ 
     links[l].onmouseover = function() { 
     this.classList.toggle("tadan"); 
     }; 
} 

Важно также отметить, что getElementsByTagName() вернется «живой» HTMLCollection элементов, в то время как querySelectorAll() возвратит «неживой» NodeList, которые могут повлиять, как элементы в них используются.

+0

https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName, похоже, указывает, что getElementsByTagName возвращает HTMLCollection. Разница между HTMLCollection и NodeList заключается в том, что HTMLCollection всегда живет? – heapunderflow

+0

Вы правы. По какой-то причине я предполагаю, что я сначала ссылался на неправильную функцию. Но да, 'HTMLCollection' жив, а' NodeList' - нет. –

0

должен loooopp

var link = document.getElementsByTagName('a'); 

for(var i=link.length; i--;) 
    link[i].onmouseover = function() { 
      this.classList.toggle("tadan"); 
    }; 

ИЛИ вы должны JQuery помечены, так что вы могли бы просто

$('a').mouseover(function(){ 
    $(this).toggleClass('tadan'); 
}); 
+1

Если вы используете jQuery, можете также сделать все это способом jQuery: '$ (this) .toggleClass ('tadan');' –

+1

Вы можете упростить код, если вы используете 'this' вместо' z' внутри события обработчик. Тогда вы можете опустить IIFE. –

+0

хорошие моменты, спасибо. –

-2

getElementsByTagName('a') вернет массив всех элементов a. Проведите через массив и toogle класс для каждого элемента a,

+0

У вас есть источник этого требования? Почему он чувствителен к регистру, если сам HTML не чувствителен к регистру? В моем быстром испытании оба «A» и «a» работают просто отлично. –

+0

Это просто нагло ложно ... –

+0

Согласно [этой ссылке] (http://help.dottoro.com/ljibxacv.php), он не учитывает регистр в HTML. Кроме того, [эта документация] (https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName) гласит: «При вызове HTML-элемента в документе HTML' getElementsByTagName' помещает свой аргумент в перед тем, как продолжить », что также должно избегать любых проблем с чувствительностью к регистру. –

Смежные вопросы