Javascript 为什么不是元素';s textnode登录到firefox devtool的控制台

Javascript 为什么不是元素';s textnode登录到firefox devtool的控制台,javascript,Javascript,我今天早些时候回答了这个问题。我知道整个文档在for循环内的每个循环中都会被重写。dom树中不会有任何元素。但我有一个简单的问题,在里面我制作了一个console.log(),它将注销每个元素的内部文本。由于所有代码都是同步的,所以第一个列表元素的文本应该作为document.write(i)打印出来是否按顺序显示在下面?还是快到让我的眼睛看不见 <html> <body> <ul id="groupList"> <li class="listing"&

我今天早些时候回答了这个问题。我知道整个文档在for循环内的每个循环中都会被重写。dom树中不会有任何元素。但我有一个简单的问题,在里面我制作了一个console.log(),它将注销每个元素的内部文本。由于所有代码都是同步的,所以第一个列表元素的文本应该作为
document.write(i)打印出来
是否按顺序显示在下面?还是快到让我的眼睛看不见

<html>
<body>
<ul id="groupList">
<li class="listing">First</li>
<li class="listing">First</li>
<li class="listing">First</li>
<li id="value"></li>
</ul>
<button id="change">change listing</button>
<script>
function changeClass(){
   var list =  document.querySelectorAll(".listing");
   for (i=0;i<3;i++) {
      console.log(list[i].innerHTML);

      list[i].style.color = "blue";

      document.write(i);
   }

}
document.getElementById('change').addEventListener('click',changeClass,true);
</script>
</body>
</html>

    首先 首先 首先
更改列表 函数changeClass(){ var list=document.querySelectorAll(“.listing”); 对于(i=0;i 由于所有代码都是同步的,所以第一个列表元素的文本应该打印为
文档。write(i)
是否按顺序在下面?或者它的速度快到让我的眼睛看不见

<html>
<body>
<ul id="groupList">
<li class="listing">First</li>
<li class="listing">First</li>
<li class="listing">First</li>
<li id="value"></li>
</ul>
<button id="change">change listing</button>
<script>
function changeClass(){
   var list =  document.querySelectorAll(".listing");
   for (i=0;i<3;i++) {
      console.log(list[i].innerHTML);

      list[i].style.color = "blue";

      document.write(i);
   }

}
document.getElementById('change').addEventListener('click',changeClass,true);
</script>
</body>
</html>
第一次调用
document.write
会清除整个文档。此时发生的事情似乎取决于浏览器(而且非常有趣!)

在Chrome中,按下按钮后,我会在控制台中看到三次“First”,并在文档中看到
012
(我尝试时会看到)

在Firefox中,按下按钮会在控制台中显示一次“First”,并在文档中显示
012

在IE中,按下按钮可在控制台中显示一次“First”,在文档中仅显示一次
0

每一个对我来说都有不同的意义:

  • querySelectorAll
    返回一个断开连接的元素集合。这意味着即使从文档中删除了元素,它们仍会保留在集合中(与活动的
    getElementsByTagName
    不同)

  • 我的猜测是Chrome将控制台视为浏览器的一部分。它很乐意通过断开连接的元素循环并将它们输出到一个控制台

  • 我的猜测是Firefox将控制台视为特定于文档的。因此,我们编写的
    控制台在第一个
    文档之后不再存在。write
  • 我的猜测是IE在文档被销毁时抛出一个异常或只是终止脚本(我正在试验,看到它抛出一次拒绝访问,但不是每次)
一句话:如果您销毁了整个文档,当您试图继续使用该文档的资源时,可能不会太惊讶于发现奇怪的结果

实时复制:

函数changeClass(){
var list=document.querySelectorAll(“.listing”);

对于(i=0;我不确定你的问题是什么..上面的代码在控制台中打印3“First”,在DOM中打印“012”,这是意料之中的。在我的firefox开发工具中..我没有看到文本Nodes没有显示“First”三次在控制台中…这就是我想知道的:|它在chrome中显示,但在firefox中不显示…我正在测试firefox@AL-扎米:这很有趣。很抱歉,在添加新的解释时,我可能刚刚删除了您喜欢的解释。这是推测性的,我删除答案可能更合适。似乎
是这样做的document.write
替换了Firefox上的窗口,但该代码仍在旧窗口中运行,这就是为什么
console.log
停止工作的原因。但是
document.defaultView.console.log(list[i].innerHTML)
起作用。这是一个很好的答案……如果合适,您可以添加更多内容:)