0

jQueryなどを使わずにjavascriptを学ぼうとしています。

このエラーが発生しています: 未定義のメソッド 'getElementsByTagName' を呼び出せません

エラーの問題はわかっていますが、それを解決する方法はわかりません。今後このエラーを回避するにはどうすればよいですか?

   var menu = document.getElementsByClassName("menu-item");
    var i;
    for (i = 0; i < menu.length; i = i + 1) {
      menu[i].addEventListener("mouseenter", function () {
        setInterval(function(){
          menu[i].getElementsByTagName("a").css("color","red")
        },5000)
      })
    }
4

1 に答える 1

1

実はコードにはもっと深い問題があります。setIntervalの関数は、ループの実行中に呼び出されません。ループが終了した後に呼び出されます。そのため、呼び出されるとi、値がmenu.lengthになるため、配列の外側になります。それを修正するには、次のようなことを試してください: (フィドル: http://jsfiddle.net/bKY9y/5/ )

var menu = document.getElementsByClassName("menu-item");
console.log(menu);

for (var i = 0; i<menu.length; i++)
{

    console.log(menu[i].addEventListener)
    menu[i].addEventListener("mouseover",function () {
        var obj = this;
        setTimeout(function(){
            console.log(obj);
            var a = obj.getElementsByTagName("a");
            for (var j = 0; j < a.length; j++){
                a[j].style.color = "red";
            }          
        },1000)
      })
}
于 2013-11-02T06:21:19.157 に答える