似乎' .getElementsByClassName'叫了两次

时间:2017-01-03 11:18:02

标签: javascript

我想操纵youtube的DOM以隐藏不需要的视频,我正在努力解决这个错误 'innerText' of undefined

这些是有问题的部分的源代码,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();
    }
  }

Chrome控制台会显示ChannelName和Element Count,如下所示: enter image description here

这两个结果不同,但这些结果是同时执行的。更准确,似乎SidebarItems[_count].getElementsByClassName('g-hovercard');执行了两次,并取代了之前的结果。结果,ChannelName.length == 0变为true,并且return;已执行。

我不知道它是怎么回事。堆栈正在爆炸,我的头也一样。

请帮忙!

1 个答案:

答案 0 :(得分:0)

SidebarItems[_count].getElementsByClassName('g-hovercard');出现在for循环中。

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

每次调用其中包含getElementsByClassName的行时,它都会有_count的不同值。