为什么document.write(“ - >”)无法按预期工作?

时间:2012-12-09 21:22:28

标签: javascript html document.write

<p>hello</p>
<script type="text/javascript">
document.write("<!--");
</script>
<p>world</p>
<script type="text/javascript">
document.write("-->");
</script>
<p>nihao</p>

我认为这段HTML的输出是

hello
nihao

但结果如下:

hello
");
nihao

我应该如何达到我的预期?这有什么问题?

5 个答案:

答案 0 :(得分:7)

好吧,第一个JavaScript元素被执行,导致这样的表示:

<p>hello</p>
<!--
<p>world</p>
<script type="text/javascript">
document.write("-->");
</script>
<p>nihao</p>

所以HTML注释开始你刚刚将spans添加到你的下一个JavaScript元素中,结果输出正如你所描述的那样。要回答你的第二个问题,以下是错误的吗?

<p>hello</p>
<script type="text/javascript">
document.write("<!--<p>world</p>-->");
</script>
<p>nihao</p>

答案 1 :(得分:5)

这是因为在JavaScript运行之前,javascript中的<!--被解析为注释的开头。

答案 2 :(得分:4)

有一些有用的答案,但如果你真的想创建一个评论并将其插入你的文档,那么你需要使用createComment() function

var comment = document.createComment("This is a comment") 
​document.appendChild(comment);​

将输出:

<!--This is a comment-->

答案 3 :(得分:2)

要获得您期望的完全结果:

<p>hello</p>
<script id="ahh" type="text/javascript">
document.write("<!"+"--"+"<p>world<p>--"+">");
document.getElementById('ahh').remove()
</script>
<p>nihao</p>​
无论如何,这是非常糟糕的主意。

答案 4 :(得分:0)

如果像我一样,您遇到此问题想要在启用JavaScript时隐藏元素,请考虑改用<noscript>标签!