当前位置: 代码迷 >> JavaScript >> 不平衡树-JS错误
  详细解决方案

不平衡树-JS错误

热度:94   发布时间:2023-06-03 18:08:21.0

我正在开发一个使用循环创建所需输出的应用程序; 这里是从1到50的数字。我使用的是for循环,并使用并置方法显示循环的数字。 但是随后浏览器中的调试器说我写了一个不平衡的树。 这是错误:

使用document.write()编写了不平衡的树,导致重新解析了网络中的数据。 有关更多信息, 参见

这是代码:

<script type="text/javascript">
  for(i=1;i<=50;i++){
    document.write("<a href='page.html#"+i+">"+i+"</a>");
  }
</script>

注意:我正在创建的链接使用id属性来完全链接页面上的某处。

感谢帮助。

这是一个警告。 它发生在Firefox 4及更高版本中。
来自 :

但是,在Firefox 4和更高版本中,HTML解析器也以推测方式运行HTML树构造算法。 有利的一面是,当推测成功时,无需重新解析已扫描的脚本,样式表和图像的传入文件部分。 不利的一面是,当猜测失败时,将会有更多的工作丢失。
[...]
当document.write()更改树生成器状态,使得</script>标记后的推测状态在解析了document.write()插入的所有内容后不再成立时,推测树构建将失败。 但是,只有document.write()异常使用会引起麻烦。 这里是要避免的事情:
[...]
不要写不平衡的树。 <script>document.write("<div>");</script>不好。 <script>document.write("<div></div>");</script>是可以的。

解决的办法是写出丢失的单引号。

<script type="text/javascript">
        for(i=1;i<=50;i++){
            document.write("<a href='page.html#"+i+"'>"+i+"</a>");
        }
    </script>

您错过了单引号。

尝试通过以下方式运行:

for(i=1;i<=50;i++){
    document.write("<a href='page.html#"+i+"'>"+i+"</a><br/>");
}

使用单引号和双引号时要小心。

即使您document.write(...)是一棵平衡树,例如document.write('<span>X</span>') ,您仍然可以获得相同的错误消息。

一种可能的解释是,您不是在正文中而是在html的头中执行该JS代码,从而编写了不会在头中发生的内容。

例如:

错误:

<html>
    <meta charset="UTF-8">
    <script>
        document.write('<span>X</span>');
    </script>
</html>

好:

<html>
    <head>
        <meta charset="UTF-8">
    </head> 
    <body>
        <script>
            document.write('<span>X</span>');
        </script>
    </body>
</html> 
  相关解决方案