2017-01-03 40 views
0

我想操縱YouTube的DOM來隱藏不需要的視頻,並且我正在努力處理錯誤 'innerText' of undefined看起來'.getElementsByClassName'被調用兩次

這些是問題部分的源代碼,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(); 
    } 
    } 

鉻控制檯顯示頻道名稱,和元素計數這樣的: enter image description here

這兩個結果是不同的,但這些同時執行。更準確,似乎SidebarItems[_count].getElementsByClassName('g-hovercard');被執行兩次,並取代了前一個的結果。結果,ChannelName.length == 0變爲true,並且return;被執行。

我不知道該怎麼辦。堆棧正在炸燬,而我的腦袋也一樣。

請幫忙!

回答

0

SidebarItems[_count].getElementsByClassName('g-hovercard');出現在for循環內。

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

每次用它getElementsByClassName行被調用,它有_count不同的值。

+0

那麼,我應該改變'SidebarItems.length'爲一些變量存儲初始長度值? –