2017-01-03 13 views
0

不要な動画を隠すためにYouTubeのDOMを操作したいのですが、私はこのエラーで苦労しています 'innerText' of undefined「.getElementsByClassName」が2回呼び出されたようです

これらは問題のある部分のソースコードです。SidebarItemsは、ビデオの再生中に「関連するビデオ」要素を持つ配列です。

enter image description here

var SidebarItems = document.getElementsByClassName('video-list-item'); 

    for(_count = 0; _count < SidebarItems.length; _count++) 
    { 
    // Is Replaced Video Contaions Blocked Keyword? 
    var VideoName = SidebarItems[_count].getElementsByClassName('title'); 
    if(VideoName.length == 0) 
    { 
     return; 
    } 

    if(ValidateString(VideoName[0].innerText)) 
    { 
     SidebarItems[_count].remove(); 
     continue; 
    } 

    // Is Replated Video Registered by Blocked Channel? 
    var ChannelName = SidebarItems[_count].getElementsByClassName('g-hovercard'); 
    console.debug(ChannelName); 
    console.debug("Element Count = " + ChannelName.length); 
    if(ChannelName.length == 0) 
    { 
     return; 
    } 

    if(ValidateChannelName(ChannelName[0].innerText)) 
    { 
     SidebarItems[_count].remove(); 
    } 
    } 

クロムコンソールはChannelNameはを示し、要素は、このようなカウント: enter image description here

これら2つの結果が異なっているが、これらは同時に実行されます。より正確には、SidebarItems[_count].getElementsByClassName('g-hovercard');が2回実行されているように見え、前の結果を置き換えました。その結果、ChannelName.length == 0trueとなり、return;が実行されます。

どうすればいいのかわかりません。スタックが爆発し、私の頭は同じになる。

助けてください!

答えて

0

SidebarItems[_count].getElementsByClassName('g-hovercard');は、forループ内に表示されます。

for(_count = 0; _count < SidebarItems.length; _count++) 

それでgetElementsByClassNameを持つ行が呼び出されるたびに、_countの異なる値を持ちます。

+0

次に、 'SidebarItems.length'を初期長さの値を格納する変数に変更する必要がありますか? –

関連する問題