<script>标签是否可以自行关闭?</script>

时间:2010-12-25 21:39:01

标签: html xhtml html5

我的网站上有这段代码

<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加载但是下面正确编写的标签不会?

4 个答案:

答案 0 :(得分:53)

在HTML中,有些标签始终是自动关闭的。例如,<hr>Some content here</hr>没有任何意义。同样,有些标签不能自动关闭。 <script>标记就是其中之一。

我不确定没有自我关闭<script>标签的原因,但原因可能是标签旨在始终包含内部代码。再说一遍,我不确定。

答案 1 :(得分:25)

因为它被解析为:

第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文档中,由于浏览器不正确实现的遗留问题,自动关闭标记只是一个开始标记(因此只有在禁止结束标记时才可以)。

答案 2 :(得分:20)

David Dorward's answer从一个角度解释了这个问题,但是有一个更深层次的原因导致你无法做到这一点:

标记末尾的斜杠不会使其在HTML

中自动关闭

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

答案 3 :(得分: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" />

的作品? ; - )

<强>更新

运行代码并隐藏<p>元素,所以...看起来好像有用吗?

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();
});