While 循环和 innerHTML - 为啥它会反向显示数字?

Posted

技术标签:

【中文标题】While 循环和 innerHTML - 为啥它会反向显示数字?【英文标题】:While loop and innerHTML - Why does it show the numbers in reverse?While 循环和 innerHTML - 为什么它会反向显示数字? 【发布时间】:2019-02-07 07:16:17 【问题描述】:
function doItAgain() 

            var loopCount = 5;

            while(loopCount > 0) 

                    var target = document.getElementById("target");
                    target.innerhtml = "LoopCount: " + loopCount + "<br>" + target.innerHTML;
                    console.log("LoopCount is now: " + loopCount);
                    loopCount = loopCount -1;
                

这是当前函数。 它由使用 onclick 事件处理程序定义的按钮激活。

现在,我的问题如下 -> 为什么在按下按钮后会显示从 1 到 5 的数字,而不是像控制台中那样从 5 到 1 的数字? 我已经知道,如果我将 target.innerHTML 设置为句子的开头,它将在我的网页中从 5 到 1 显示它们,但我不知道为什么会这样

【问题讨论】:

在脑海中或在纸上仔细阅读它。您正在添加到字符串的前面,因此您正在将第一个添加的数字向下推。 target.innerHTML = "LoopCount: " + loopCount + "&lt;br&gt;" + target.innerHTML;更改为target.innerHTML = target.innerHTML; + "LoopCount: " + loopCount + "&lt;br&gt;" ^^ 从一开始就学习如何使用浏览器和/或 IDE 中内置的调试器也非常值得。然后,您可以单步执行代码,逐个语句,并准确查看变量在任何给定时刻包含的内容,您正在执行的操作顺序是什么等。 简要地说,我认为这是我问题的解决方案,但它飞走了,我再也找不到它了。感谢您的澄清,@Carcigenicate 您在每次迭代中添加新数据,即迭代越晚,距离字符串末尾越远,相当于“越靠近字符串开头” . 【参考方案1】:

考虑这一行的作用:

target.innerHTML = "LoopCount: " + loopCount + "<br>" + target.innerHTML;

假设target.innerHTML,在第一个循环之后,包含

LoopCount: 5<br>

然后在loopCount = 4 循环中,你正在做

target.innerHTML = "LoopCount: " + loopCount + "<br>" + target.innerHTML;

又是

target.innerHTML = "LoopCount: " + loopCount + "<br>" + "LoopCount: 5<br>";
// -----------------------------------------------------^^^^^^^^^^^^^^^^^^

所以你得到

LoopCount: 4<br>LoopCount: 5

等等。

如果您将innerHTML first 放在该行,您将颠倒顺序:

target.innerHTML = target.innerHTML + "<br>LoopCount: " + loopCount;

【讨论】:

以上是关于While 循环和 innerHTML - 为啥它会反向显示数字?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 innerHTML 在 for 循环中不能正常工作?

为啥我不能用 `var output = document.getElementById('message').innerHTML;` 做一个循环

为啥我们不能直接在循环中使用“innerHTML”函数而不是连接文本以获得垂直书写列表?

StateFlowImpl collect有一个while循环,如果我在UI线程上使用它,为啥它不会阻塞UI线程

为啥我的 while 循环结束了?

没有退出“while”循环,但为啥呢?