Javascript Firefox中document.write()的不平衡树
据我所知,这是Firefox中投机执行的一个问题。以下是整个html演示文件:Javascript Firefox中document.write()的不平衡树,javascript,firefox,Javascript,Firefox,据我所知,这是Firefox中投机执行的一个问题。以下是整个html演示文件: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Foo</title> </head> <body> <script language="JavaScript" type="text/javascript
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Foo</title>
</head>
<body>
<script language="JavaScript" type="text/javascript">
document.write("<table>")
document.write("<tbody>")
document.write("<tr>")
document.write("<td>")
document.write("<textarea rows='10' cols='12'>")
document.write("</textarea>")
document.write("</td>")
document.write("</tr>")
document.write("</tbody>")
document.write("</table>")
</script>
</body>
</html>
我不相信我在写一棵不平衡的树。有人能提出一个简单的方法来避免这种情况吗?为什么不调用document.write只写一次?像这样:
document.write("<table><tbody><tr><td><textarea rows='10' cols='12'></textarea></td></tr></tbody></table>");
document.write(“”);
或者,如果要保留特征线,可以使用反斜杠:
document.write("<table>\
<tbody>\
<tr>\
<td>\
<textarea rows='10' cols='12'>\
</textarea>\
</td>\
</tr>\
</tbody>\
</table>");
document.write(“\
\
\
\
\
\
\
\
\
");
编辑:
上述解决方案无法解决问题,因此,如果你只是将其放入体内:
document.documentElement.innerHTML = "<table>\
<tbody>\
<tr>\
<td>\
<textarea rows='10' cols='12'>\
</textarea>\
</td>\
</tr>\
</tbody>\
</table>";
document.documentElement.innerHTML=”\
\
\
\
\
\
\
\
\
";
看起来这是一个与textarea
内部表格
完全相关的特例
table
本身不会引起问题,textarea
insidediv
也不会引起问题,textarea
notinsidetable
也不会引起问题
可能在某种程度上与textarea
内容的特定处理有关(例如。 g、 与常规元素相比,即使像
这样的特殊字符没有通过像
/
)这样的实体转义,也将标记显示为文本
摆脱
document.write()
调用的一个相对简单的方法是创建一个数组(例如。 g、 parts
)在使用document.write()
的代码之前,将所有document.write()
调用替换为parts.push()
,然后将parts.join(“”)
分配给整个容器的innerHTML
属性。不要使用文档。write
,请参阅中的警告。请改用DOM方法。控制台是否指示是哪一行导致了问题?如果您在一个document.write()语句中编写所有html,您还会遇到问题吗?在我看来,仅仅是不使用document.write()
是这里的解决方案…document.createElement?无法告诉你为什么表中的textarea
似乎会这样做,文档。write(“”
也会这样做,但你可能听说文档。write
是邪恶的,只是不要使用它。在我的测试中,控制台中会产生相同的警告。我尝试了这个,但没有任何区别。即使只调用一次document.write
,问题仍然存在。@AlexanderO'Mara你说得对。我认为这个错误是由多次调用write函数引起的。但是我带来了一个解决方案,检查编辑。这是一个有趣的方法,但我认为我没有一个方便的表锚定点。它是正在生成的较长html列表的一部分。除了这一个带有textarea
标记的地方之外,它不会导致任何问题。我只是不明白这个案子有什么特别之处。
document.documentElement.innerHTML = "<table>\
<tbody>\
<tr>\
<td>\
<textarea rows='10' cols='12'>\
</textarea>\
</td>\
</tr>\
</tbody>\
</table>";