Почему <a id="test"/> вырывается из цепочки DOM? - PullRequest
0 голосов
/ 12 марта 2012
<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
    </head>
    <script type="text/javascript">
        function fire() {
            console.log(document.body.children.length);
            console.log(document.body.children[0].children.length);
        }
    </script>
    <body onload="fire()">
        <div>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer pharetra ipsum erat. Aenean convallis laoreet massa, et gravida purus faucibus ac. <a id="test"/>Vestibulum libero justo.</p>
        </div>
    </body>
</html>

Когда вы откроете консоль, вы увидите, что <a> - это children из <body>, <div> и <p>. WTF ??

Если <a> закрывается с помощью «правильного» закрывающего тега, проблема исчезает, и ее единственный дочерний элемент - <p>.

Может кто-нибудь объяснить мне это?

PS: проверено на стабильной версии Chrome.

Ответы [ 5 ]

8 голосов
/ 12 марта 2012

Я думаю, это потому, что a не является допустимым коротким тегом.

3 голосов
/ 12 марта 2012

Согласно рекомендациям W3C:

12.2 Элемент A [...] Начальный тег: требуется , Конечный тег: требуется

Недействительно HTML. Вам нужно как минимум закрыть тег сразу после, например <a id="test"></a>.

Источник: http://www.w3.org/TR/html401/struct/links.html

1 голос
/ 12 марта 2012

Это HTML5, а не XML. Только пустые элементы могут иметь такое представление. Также см. 8.1.2.1 часть 6

1 голос
/ 12 марта 2012

С w3schools.com / tags / default.asp вы можете увидеть само окончание тегов:

"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"

Метка A не должна закрываться самостоятельно.

1 голос
/ 12 марта 2012

<a> теги требуют конечного тега (</a>).

<a /> недействительно, и браузеры попытаются выяснить, что вы имеете в виду, но неожидать последовательного поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...