不平衡的树 - JS错误

时间:2015-07-26 12:34:43

标签: javascript

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

  

使用document.write()编写了一个不平衡的树,导致重新分析来自网络的数据。有关详细信息https://developer.mozilla.org/en/Optimizing_Your_Pages_for_Speculative_Parsing

以下是代码:

value = null

注意:我正在创建的链接使用id属性在页面上的某个位置进行链接。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

这是一个警告。它发生在Firefox 4及更高版本中。
来自MDN: Optimizing your pages for speculative parsing

  

但是,在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>

答案 1 :(得分:1)

你错过了一个单引号。

尝试使用以下网址运行:

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

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

答案 2 :(得分:0)

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

一种可能的解释是,你执行的JS代码不是在正文中,而是在html的头部,编写一些不会出现在头部的东西。

例如:

错:

<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>