2014-11-07 2 views
1

Не являются ли пробелы сразу после открытия html-тега и непосредственно перед закрывающими узлами html-тегов html? Рассмотрим следующий код:Какие пробелы в HTML считаются пустыми узлами

<!DOCTYPE HTML> 
 
<html> 
 
    <head> 
 
    <title>The document</title> 
 
    </head> 
 
    <body> 
 
    <div>Data</div> 
 
    <ul> 
 
     <li>Warning</li> 
 
     <li></li> 
 
    </ul> 
 
    <div>Top Secret!</div> 
 
    </body> 
 
</html>

Теперь, когда я смотрю на отображаемой странице в Firebug, я вижу, что узел «голова» имеет «название» узел и 2 «пробельные» узлы по обе стороны от него. Это то, что я ожидаю. Точно так же я ожидал увидеть «пробельные» узлы между <html> и <head> и между </body> и </html>. Но это не так. Почему Firebug не считает их пробелами?

Вы также можете попробовать это на this онлайн DOM viewer.

+3

Это дикая догадка моя, но содержание не допускается между ' и' ', а также между' и '' так белое пространство в этих местах не должны влиять на содержание. – chiccodoro

+0

Однако это противоречит тому, что говорится в https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Whitespace_in_the_DOM. – chiccodoro

+1

Невозможно воспроизвести эту проблему. Какая у вас версия Firefox? – user1835565

ответ

1

Я знаю, что это старый вопрос, но он заслуживает правильный ответ, если только потому, что браузеры обрабатывают два случая (1) между <html> и <head> и (2) между </body> и </html> по-разному.

В первом случае браузеры просто отбрасывают символы пробела. "before head" insertion mode этапа построения дерева анализатора HTML требует, чтобы пробелы были отброшены. Хотя это необычно, скорее всего, для обратной совместимости. В дни, предшествовавшие CSS, вероятно, что браузеру необходимо было бы отбросить такие символы, чтобы остановить нечетные пробелы, появляющиеся в начале отображаемого документа.

Во втором случае символы пробела не отбрасываются, они добавляются в документ DOM. Но они не добавляются как текстовый узел после элемента тела, но только в его конце. Таким образом, нет текстового узла, который будет отображаться в просмотрах DOM между </body> и </html> тегами.

0

В Mozilla все пробелы в текстовом содержимом исходного документа представлены в DOM. Это не включает пробелы в тегах.

Таким образом, это означает, что: a) будут некоторые текстовые узлы, которые содержат только пробелы b) некоторые текстовые узлы будут иметь пробелы в начале или конце.

Надеюсь, это поможет.

Смежные вопросы