首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么循环会跳过值?

为什么循环会跳过值?
EN

Stack Overflow用户
提问于 2017-12-07 00:35:12
回答 3查看 42关注 0票数 0

由于某些原因,我的一个循环从无序列表中每隔一次离开一次列表项,而不是删除每个列表项。我很困惑这是为什么。

代码:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">


<title>Debugging</title>    
    <script>

    function testingTesting() {
        var itemList = document.getElementsByTagName('LI');

        document.getElementById('demo').innerHTML = itemList.length;

        for (i = 0; i < itemList.length; i++) {
            document.getElementById('skillList').removeChild(itemList[i]);
        }   
    }     
    </script>
  </head>
  <body>
    <div id="toDisplay">

         <h2>Heading for Reasons</h2>
        <ul id="skillList">
          <li>Alpha</li>
          <li>Bravo</li>
          <li>Charlie</li>
          <li>Delta</li>
          <li>Foxtrot</li>
          <li>Exxon</li>
        </ul>

        <p id="demo"> </p>
    </div>

    <input type="button" value="Sort!" onclick="testingTesting()">

  </body>
</html>

单击一次排序按钮(在Chrome和Opera中)的结果是:

“寻找理由”

Bravo Delta埃克森6“

当点击两次时,结果是:

“寻找理由”

增量3“

有人知道为什么模2n +1的itemList数组中的列表项被跳过吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-07 00:39:42

这是因为当您删除一个项目时,下一个项目的索引以及总计数都会发生变化。不要使用增量器。试着这样做:

代码语言:javascript
复制
function testingTesting() {
    while (document.getElementsByTagName('LI').length > 0) {
        document.getElementById('skillList').removeChild(document.getElementsByTagName('LI')[0]);
    }   
}     
票数 0
EN

Stack Overflow用户

发布于 2017-12-07 00:37:09

您正在从您正在迭代的容器中删除项。

如果您删除一个项目,请取消i的增量。

票数 2
EN

Stack Overflow用户

发布于 2017-12-07 00:41:47

当你开始的时候,你循环遍历这个数组(伪代码)

代码语言:javascript
复制
[Alpha,Bravo,Charlie,Delta,Foxtrot,Exxon]

然后执行

代码语言:javascript
复制
removeChild(itemList[0])

所以你的数组是:

代码语言:javascript
复制
[Bravo,Charlie,Delta,Foxtrot,Exxon]

现在,您可以继续执行:

代码语言:javascript
复制
removeChild(itemList[1])

因此您删除了Charlie元素(数组的元素1)。结果是:

代码语言:javascript
复制
[Bravo,Delta,Foxtrot,Exxon]

最终结果将是:

代码语言:javascript
复制
[Bravo,Delta,Exxon]

第二次单击时,过程是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47679184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档