Discuss / JavaScript / 练习

练习

Topic source
var list=document.getElementById('test-list');
var c=list.children;
var arr= ['JavaScript','HTML','CSS'];
for(var i of c)
{
   if(arr.indexOf(i.innerText)==-1)
    {
     list.removeChild(i); }
    }
}

这个有问题吧!

老湿说过,当一个结点被删除时,list 已经被改变,length - 1,i 指向的元素会发生变化。

所以当把老湿的 li 顺序修改后,这代码就会出错

<html>
<body>
  <ul id="test-list">
      <li>JavaScript</li>
      <li>DirectX</li>
      <li>ANSI C</li>
      <li>HTML</li>
      <li>Swift</li>
      <li>CSS</li>
  </ul>
</body>
        <script>
            var list = document.getElementById('test-list');
            var child = list.children;
            var arr = ['JavaScript','HTML','CSS'];
            for(var i of child)
            {
               //console.log('i = ' + i + ' child-i: ' + i.innerText);
               if(arr.indexOf(i.innerText) == -1) {
                 list.removeChild(i);
               }
            }
        </script>
</html>

输出为:

JavaScript
ANSI C  // 这里删除完 DirectX 后,你的 i 指向了下一个(HTML),所以 ANSI C 没有删除!!
HTML
CSS

  • 1

Reply