スニペットでは、button
は のインスタンスであり、イベント リスナーを直接アタッチすることも、要素のプロパティを直接NodeList
変更することもできません。
あなたの最善の策は、イベントを委任することです:className
document.body.addEventListener('mouseover',function(e)
{
e = e || window.event;
var target = e.target || e.srcElement;
if (target.tagName.toLowerCase() === 'img' && target.className.match(/\bnavButton\b/))
{
target.className += ' active';//set class
}
},false);
もちろん、イベントが発生したらactive
クラスを削除する必要があると思いmouseout
ます。そのために 2 番目のデリゲーターを使用することを検討することもできactive
ますが、クラスを持つ 1 つの要素にイベント ハンドラーをアタッチすることもできます。
document.body.addEventListener('mouseover',function(e)
{
e = e || window.event;
var oldSrc, target = e.target || e.srcElement;
if (target.tagName.toLowerCase() === 'img' && target.className.match(/\bnavButton\b/))
{
target.className += ' active';//set class
oldSrc = target.getAttribute('src');
target.setAttribute('src', 'images/arrows/top_o.png');
target.onmouseout = function()
{
target.onmouseout = null;//remove this event handler, we don't need it anymore
target.className = target.className.replace(/\bactive\b/,'').trim();
target.setAttribute('src', oldSrc);
};
}
},false);
このコードには改善の余地がありますが、ここですべてを楽しむことはできません ;-)。