Я заметил, что jQuery (или Firefox) превратит некоторые из моих <span class = "presentational"></span> into <span class = "presentational" />
Теперь мой вопрос: можно ли писать такую разметку? Какие-нибудь браузеры подавятся этим?
Лично я считаю, что <span class = "presentational" /> выглядит чище, если он будет пустым.





да. Это. В некоторых случаях это вызовет проблемы для старых браузеров.
<script type='text/javascript' src='script.js' />
В этом случае старый браузер может не понять, что тег <script> закончился.
Подходит ли IE6 под старый браузер? Мне нужна поддержка только в IE6, firefox 2, safari 2, chrome +++
Думаю, если учесть стандартную жалобу, то она ОЧЕНЬ СТАРА!
Ха ха я знаю. По крайней мере, кажется, что некоторые разработчики наконец-то перестали поддерживать.
Я знаю из недавнего болезненного опыта, что MSIE6 определенно подавляется этим.
Некоторые новые браузеры тоже. <script src = "/scripts/jquery.js" /><script>/* In Firefox (tested in 3.5 and 3.6), this script does not run, and is not parsed as part of the DOM; the earlier script tag's self-closing slash is marked as red in "view source", and this script's opening tag is displayed as text content of the earlier script, ignored by the parser. */ alert('test 1');</script><script>/* In firefox, this script does run, and is parsed as part of the DOM */ alert('test 2');</script> Интересно, что раньше WebKit вел себя примерно так же, но теперь, похоже, прощает самозакрывающиеся <script>.
@Mehrdad: LOL @ ваше использование "ЖАЛОБЫ", особенно. относительно IE6 (DIEDIEDIE)
Последние версии Google Chrome также рассматривают <script src = "..." /> как недопустимый.
Обычно использование сокращений для пустых элементов не является проблемой, но есть некоторые исключения, когда это может вызвать проблемы.
<script> - важный, который нужно закрыть с помощью </script>, чтобы избежать проблем.
Другой - <meta>, который намного лучше работает с пауками, записанными как <meta></meta> вместо <meta />.
Не совсем вопрос, но связанные, с точки зрения форматирования, версии IE имеют проблемы только с пустыми элементами, такими как <div></div> или <div />. В этом случае для сохранения форматирования требуется <div> </div>.
meta - это пустой элемент. В HTML (или XHTML, который используется как HTML) он ДОЛЖЕН быть записан как <meta />! В истинном XHTML это не имеет значения.
@thomas: Разве все теги не должны быть закрыты (включая самозакрытие) в XHTML?
@Casebash: все элементы должны быть закрыты в XHTML, но есть два способа закрытия элемента - с помощью отдельного закрывающего тега или самозакрывающегося с косой чертой в конце открывающего тега. Однако в HTML и HTML-совместимом XHTML, то есть XHTML1, некоторые элементы, а именно элементы, модель содержимого которых ПУСТАЯ, такие как img, br и meta, НЕ должны иметь отдельный закрывающий тег. Для непустых элементов, таких как div, нужен отдельный закрывающий тег. Вышеупомянутый ответ совершенно неверен относительно <meta> </meta> - это запрещено и должно быть самозакрывающимся, т.е. <meta /> в XHTML1 или <meta> (без закрывающего тега) в HTML.
мы с вами знаем, что почти каждый, кто использует XHTML 1.0, использует его, как если бы это был HTML, и поэтому применяются правила HTML. Синтаксис, специфичный для XHTML, может быть подтвержден, но он не будет работать, если он несовместим с HTML. На самом деле я уточнил то, что сказал, сказав «в HTML и HTML-совместимом XHTML». Теперь, если вы должны обслуживать XHTML как XML, тогда вы можете использовать <meta> </meta>, если захотите. Но вы все равно не можете сделать это в сегодняшней сети. Не будем путать людей.
Обслуживается как application / xhtml + xml, <span /> означает создание элемента span без содержимого.
Обслуживаемый как text / html, <span /> означает создание элемента span, в котором содержимое элемента следует за этим тегом до тех пор, пока не встретится тег </span> или не встретится другой тег (или EOF), который неявно закрывает элемент. т.е. в этом случае <span /> означает то же, что и <span>.
Кроме того: HTML 5 определяет как сериализацию, так и сериализацию HTML и XHTML, поэтому он так или иначе не влияет на эту проблему. Он требует, как и XHTML 1.1, чтобы XHTML обслуживался как application / xhtml + xml, в отличие от XHTML 1.0. По сути, это ничего не меняет, поскольку все браузеры рассматривают любую версию XHTML, обслуживаемую как text / html, как суп тегов.
Чтобы прояснить, я думаю, вы имеете в виду «Обслуживается как text / html, <span> означает создание ...», а не «<span />». Самозакрывающиеся элементы - это XML-изм, который парсеры HTML плохо понимают.
Нет, я имел в виду именно то, что сказал. Дело в том, что в text / html <span /> не является самозакрывающимся элементом, это открывающий тег для элемента. Все анализаторы HTML, используемые браузерами в настоящее время, обрабатывают это одинаково.
Дополнение к другим ответам: в IE наличие таких элементов, как <span />, в вашей разметке вызовет всевозможные проблемы с методами обхода DOM в JavaScript. Взгляните на следующий документ XHTML:
<?xml version = "1.0" encoding = "UTF-8"?>
<!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" xml:lang = "en" lang = "en">
<head>
<title>Test</title>
<script type = "text/javascript">
function show() {
var span = document.getElementById("span");
alert(span.innerHTML);
}
</script>
</head>
<body onload = "show();">
<p id = "p1">Paragraph containing some text followed by
an empty span<span id = "span"/></p>
<p id = "p2">Second paragraph just containing text</p>
</body>
</html>
Идея состоит в том, что при загрузке страницы JavaScript получит ссылку на пустой диапазон и отобразит его HTML-содержимое. Это будет пустая строка, верно? Не в IE этого не будет. В IE вы получаете все содержимое после диапазона во всем документе:
</P>
<P id=p2>Second paragraph just containing text</P>
Кроме того, второй <p> появляется в коллекции childNodes диапазона. Тот же самый <p> также находится в коллекции childNodes тела, что означает узел может иметь несколько родителей. Это не очень хорошие новости для скриптов, которые полагаются на обход DOM.
Еще у меня есть писал об этом в блоге.
Хороший. Обратите внимание, что это относится не только к диапазону, но и к другим встроенным элементам. И верно независимо от того, используете ли вы <span /> или <span> (хотя последнее приводит к недопустимому XHTML). Но нет к новым элементам HTML5, добавленным с помощью заточки HTML5. Использование «document.createElement ('meter')» и размещение замены <span /> на <meter> имеет тот же множественный родительский эффект, но замена <span /> на <meter /> создает модель DOM, которую вы обычно ожидаете , потому что IE обрабатывает <xxx /> как самозакрывающийся тег, когда xxx зарегистрирован как имя тега html с помощью document.createElement.
К сожалению, это не работает, если xxx - существующее имя тега HTML 4.
Есть подробности о том, какие версии IE страдают от этого?
Как сказано в вашем блоге, IE 6, 7, 8. Я проверил, что IE 9+ (и Edge) возвращает пустую строку.
См. Примечание по теме от рабочей группы XHMTL: http://www.w3.org/TR/xhtml-media-types/
Короче говоря, это нормально, если ваш XHTML будет рассматриваться как XHTML. Если вы собираетесь представить, что это HTML (что вам нужно сделать, если вы хотите, чтобы он загружался с помощью Internet Explorer (включая версию 8, самую последнюю на момент написания), тогда вам придется перепрыгивать через обручи).
Обручи настолько раздражают, что я бы рекомендовал большинству людей придерживаться HTML 4.01.
Также стоит отметить, что объявление <?xml ...?> перед типом документа переводит IE в режим причуд.
без век ... где ты был на Stack Overflow? Спасибо за ответ +1
@alex, у меня контракт и работы много. Я все еще суетлюсь туда-сюда. :)
Следует четко указать, что в HTML нет самозакрывающихся тегов, поэтому всякий раз, когда браузер решает рассматривать ваш XHTML как HTML, он не распознает, что тег закрыт. Это не проблема для тегов, которые не нужно закрывать в HTML, таких как <img>, но явно плохо с такими тегами, как <span>.
AFAIK, что пробел bf косой чертой стал обходным путем для ошибки в IE5, так что теперь это должно быть частью прошлого. - Я счастлив, что сейчас пишу только HTML5, и у меня нет проблем с использованием
<x></x>, даже когда этот тег не содержит содержимого. я думаю, что каждый имеет полное право быть счастливый для каждой единственной раздражающей / сбивающей с толку грамматической «особенности»/(SG|XH|HT|X)ML/, которую они могут оставить навсегда; самозакрывающиеся теги - это просто так. Я думаю, что<span class = "presentational"></span>четко сообщает, что это тег без содержимого, и что он универсально и однозначно понимается как таковой.