【问题标题】:Can the <script> tag not be self closed?<script> 标签不能自闭吗?
【发布时间】:2011-05-30 17:27:25
【问题描述】:

我的网站上有这段代码

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"/>
<script type='text/javascript' src='/lib/player/swfobject.js'></script>

swfobject 不工作(未加载)。

将代码修改为:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script type='text/javascript' src='/lib/player/swfobject.js'></script>

效果很好。

文档被解析为 HTML5。

我觉得这很有趣。好的,授予关闭的标签和自关闭标签是不一样的。所以如果 jQuery 无法加载我会理解的(虽然我觉得这很荒谬)。

但我不明白的是,jQuery 加载但以下正确编写的标签,不?

【问题讨论】:

标签: xhtml html


【解决方案1】:

在 HTML 中,有些标签总是自闭合的。例如,&lt;hr&gt;Some content here&lt;/hr&gt; 没有任何意义。同理,也有不能自闭的标签。 &lt;script&gt; 标签就是其中之一。

我不确定没有自封闭&lt;script&gt; 标签的原因,但原因可能来自标签旨在始终包含代码的事实。同样,我不确定。

【讨论】:

  • 是的,15 个字符。这里也一样。
【解决方案2】:

因为它被解析为:

第 1 行:脚本的开始标记

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"/>

第 2 行:如果第 1 行提到的外部脚本无法加载,则执行 JavaScript(真的是坏掉的 JavaScript!)

    <script type='text/javascript' src='/lib/player/swfobject.js'>

第 3 行:从第 1 行开始的脚本的结束标记

</script>

好的,授予的封闭标签和自封闭标签不一样。

它们是相同的(如果没有内容),但仅在 XML 文档中。用作 application/xhtml+xml 的 XHTML 文档是 XML 文档。在 HTML 文档中,由于浏览器的不当实现遗留下来,自闭合标签只是一个开始标签(因此只有在结束标签被禁止时才可以)。

【讨论】:

  • 我的错,@Quentin 是对的,浏览器会将第 1 行(自闭合脚本标签)识别为未闭合标签。对于这种情况,第 2 行被解析为脚本内容,第 3 行是结束标记。如果在第 1 行之后找不到任何 '',则将第 1 行之后的所有内容标记为脚本内容。它可以在 Chrome 开发者工具中测试,只需检查
【解决方案3】:

@Joe Hopfgartner:您是否更改了代码以测试是否

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js" />
<script type="text/javascript" src="/lib/player/swfobject.js" />

有效吗? ;-)

更新

运行代码,&lt;p&gt; 元素被隐藏了,所以...看起来可行吗?

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>questions/4531772</title>

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"/>
<script type="text/javascript" src="4531772.js"/>
</head>

<body>

<p class="test">Testing...</p>

</body>
</html>

JavaScript (4531772.js)

$(document).ready(function() {
    $('.test').hide();
});

【讨论】:

  • lol :) 很好,它破坏了以下标签,并且两个脚本都没有加载;)
  • @Joe Hopfgartner:我用我用来测试的代码更新了上面的答案。
  • 有趣!在被杀死的第二个脚本元素之后,我还有一个 css 节点......
【解决方案4】:

David Dorward's answer从一个角度解释了这一点,但你不能这样做有更深层次的原因:

标签末尾的斜线不会使其在 HTML 中自动关闭

自闭合语法是 XML 的一部分。在普通的 HTML 文档中,它没有任何意义。

【讨论】:

  • 那么像&lt;br /&gt;这样的东西不应该在HTML中使用吗?
  • @Tom:更准确地说,没有理由在 HTML 中使用它们。 “永远不应该使用”意味着它是有问题的——事实上,它只是多余的,因为 BR 元素在 HTML 中总是自动关闭的。
  • @Chuck,迟到的评论,但实际上有充分的理由让您的 html 文档也成为有效的 XML 文档。即使浏览器不关心正确关闭的标签,使文档有效的 XML 允许您更轻松地解析和转换它(即使用 XSLT)。
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
相关资源
最近更新 更多