这里有一个html,我有一个非常有趣的事情.
<html>
<head>
<script language="Javascript">
var str="me&myhtml";
function delimit(){
document.write(str);
document.write("<hr>");
}
</script>
</head>
<body onload="delimit()">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
你看到'me&myhtml',下面有一行.但是,如果你评论//document.write("<hr> "); 然后你只看到'我',这很奇怪.
事实是,javascript通常不会读取'&',而是解释为命令.但是,如果你有任何至少有6个字符的document.write(),或者'br'或'hr',那么它会显示'&'.
有任何想法吗?
如果在&myhtmlJavaScript或HTML呈现引擎之后没有HTML标记可能将其解释为无法识别或不完整的实体(缺少结尾;)并且不呈现它.如果您me&myhtml使用HTML标记,那么JavaScript或HTML呈现引擎会识别出这&myhtml不是一个不完整的实体,因为它后跟一个HTML标记而不是一个;.
您跟随字符串使用什么HTML标记无关紧要,<a>或者<p>效果如何<br>.
所有浏览器的行为都不一致.IE 6,7和8以及Firefox 2,3和3.5的行为与您描述的方式相同,Safari for Windows 3和4在您注释掉第二个document.write()或执行类似操作时不呈现任何内容document.write("abc");.无论第二个内容如何,Opera 9.64和10b3都能正确呈现文本write().
注意,使用document.write()的onload事件,而不写出格式正确,有效的HTML(完整的文档类型和<html>,<head>等)可能是一个错误呢.请注意,如果您执行以下操作,问题就不会显现:
<html>
<head>
<script>
function delimit() {
document.write('me&myhtml');
}
</script>
</head>
<body>
<script>
delimit();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
要回答您的问题,这是规范实现中的错误,或者是每个浏览器实现不同的规范的未定义部分.你正在做的事情略微不正确,没有定义稍微不正确的代码的结果,并且不能依赖它在当今使用的所有主要浏览器中表现一致.你应该避免做什么.