我正在开发一个使用循环来创建所需输出的应用程序;这里从1到50.我使用for循环并使用连接方法来显示循环数字。但是后来浏览器中的调试器说我写了一个不平衡的树。 这是错误:
使用document.write()编写了一个不平衡的树,导致重新分析来自网络的数据。有关详细信息https://developer.mozilla.org/en/Optimizing_Your_Pages_for_Speculative_Parsing
以下是代码:
value = null
注意:我正在创建的链接使用id属性在页面上的某个位置进行链接。
感谢您的帮助。
答案 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>