Может ли тег <script>не быть самозакрытым? - PullRequest
51 голосов
/ 26 декабря 2010

У меня был этот код на моем веб-сайте

<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>

Itработал нормально.

Документ был разобран как HTML5.

Я думаю, что это смешно.Хорошо, предоставленный закрытый тег и самозакрывающийся тег не совпадают.Поэтому я бы понял, если jQuery не может загрузиться (хотя я нахожу это нелепым).

Но что я не понимаю, так это то, что jQuery загружает, а следующий, правильно написанный тег - нет?

Ответы [ 4 ]

54 голосов
/ 26 декабря 2010

В HTML есть теги, которые всегда закрыты. Например, <hr>Some content here</hr> не имеет никакого смысла. Точно так же существуют теги, которые нельзя закрывать самостоятельно. Тег <script> является одним из них.

Я не уверен относительно причины отсутствия самозакрывающихся тегов <script>, но причина может быть в том, что тег предназначался для того, чтобы всегда содержать код внутри. Опять же, я не уверен.

25 голосов
/ 26 декабря 2010

Поскольку он анализируется как:

Строка 1: начальный тег для скрипта

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

Строка 2: JavaScript (действительно неработающий JavaScript!) Для выполнения, если внешний скрипт упоминается в строке1 не удается загрузить

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

Строка 3: конечный тег для сценария, запущенного в строке 1

</script>

Хорошо, предоставлен закрытый тег и самозакрывающийся тегне то же самое.

Они одинаковы (если нет содержимого), но только в документах XML.Документ XHTML, используемый в качестве application / xhtml + xml, является документом XML.В HTML-документе, благодаря наследию неправильных реализаций браузерами, самозакрывающийся тег - это всего лишь начальный тег (и это нормально только в том случае, если конечный тег запрещен).

20 голосов
/ 27 декабря 2010

Ответ Дэвида Дорварда объясняет это под одним углом, но есть более глубокая причина, почему вы не можете сделать это:

Косая черта в конце тега не делает его самозакрывающимся в HTML

Самозакрывающийся синтаксис является частью XML. В обычном HTML-документе это не имеет смысла.

3 голосов
/ 26 декабря 2010

@ Джо Хопфгартнер: Вы изменили код, чтобы проверить, если

<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();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...