问题描述
我正在开发一个使用循环创建所需输出的应用程序; 这里是从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属性来完全链接页面上的某处。
感谢帮助。
1楼
rohankvashisht
2
2015-07-26 12:46:43
这是一个警告。
它发生在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>
2楼
user3612872
1
2015-07-26 12:47:48
您错过了单引号。
尝试通过以下方式运行:
for(i=1;i<=50;i++){
document.write("<a href='page.html#"+i+"'>"+i+"</a><br/>");
}
使用单引号和双引号时要小心。
3楼
Csongor Halmai
0
2017-10-24 03:15:20
即使您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>