2016-08-10 15 views
0

JavaScriptを使用するだけで問題を解決できます。私はforループを書こうとしましたが、ホバリング時には定義されていません。私は基本的に動的に生成されたサブメニューを持っています。サブメニューでliが表示されている場合、内側のHTMLはコンテンツエリアのlisの右側に表示されます。ルーピングスルー設定インナーHTML

sideCol.getElementsByTagName('li')[0].addEventListener('mouseover', function(){ 
    document.getElementsByClassName('categoryExplorer-content')[0].children[2].innerHTML = document.getElementsByClassName('categoryExplorer-content')[0].children[1].innerHTML; 
}); 
sideCol.getElementsByTagName('li')[1].addEventListener('mouseover', function(){ 
    document.getElementsByClassName('categoryExplorer-content')[0].children[2].innerHTML = document.getElementsByClassName('categoryExplorer-content')[1].children[1].innerHTML; 
}); 
sideCol.getElementsByTagName('li')[2].addEventListener('mouseover', function(){ 
    document.getElementsByClassName('categoryExplorer-content')[0].children[2].innerHTML = document.getElementsByClassName('categoryExplorer-content')[2].children[1].innerHTML; 
}); 
sideCol.getElementsByTagName('li')[3].addEventListener('mouseover', function(){ 
    document.getElementsByClassName('categoryExplorer-content')[0].children[2].innerHTML = document.getElementsByClassName('categoryExplorer-content')[3].children[1].innerHTML; 
}); 
sideCol.getElementsByTagName('li')[4].addEventListener('mouseover', function(){ 
    document.getElementsByClassName('categoryExplorer-content')[0].children[2].innerHTML = document.getElementsByClassName('categoryExplorer-content')[4].children[1].innerHTML; 
}); 
+3

質問/問題は何ですか? – undefined

+1

'sideCol'には何がありますか?そして、 'document.querySelectorAll'を使って痛みを和らげることができます。 –

+0

問題は、コードがDRYではなく、sideColが作成されたdiv要素であるということでした。 –

答えて

1

ループは非常に簡単で、ローカル変数(ix)を使用してください。

var count = sideCol.getElementsByTagName('li').length; 
for(var i=0;i<count;i++) { 
    (function(ix) { 
     sideCol.getElementsByTagName('li')[ix] 
      .addEventListener('mouseover', function() { 
       document.getElementsByClassName('categoryExplorer-content')[0] 
        .children[2].innerHTML = 
       document.getElementsByClassName('categoryExplorer-content')[ix] 
        .children[1].innerHTML; 
     }); 
    })(i); 
} 
+0

これまで私の唯一のフォローアップの質問は、要素数がどのように変動する場合でしょうか?だから私は<5は私が<10などになる必要がありますが、ループの数に基づいてループを実行する方法はありますか?それは 'NodeList'上で直接動作しないことを忘れて、あなたは変換する必要があり、これはforEachの機能 –

+0

は、私はちょうど、カウントラインを追加しましたそれを配列に追加するか、編集された答えに '.call'メソッドを使います。 – Nosyara

+0

それを解決するには、この作品のおかげ –

1

forEach()を使用して、要素をループし、イベントリスナーをバインドします。これは、あなたに適切な要素にアクセスするためにハンドラ関数で使用できるクロージャ変数としてインデックスを与えます。

[].forEach.call(sideCol.getElementsByTagName('li'), function(el, i) { 
    el.addEventListener('mouseover', function() { 
     var explorers = document.getElementsByClassName('categoryExplorer-content'); 
     explorers[0].children[2].innerHTML = explorers[i].children[1].innerHTML; 
    }); 
}); 
+0

から –

+0

申し訳ないとエラーが返され、恐ろしい – Barmar