Нет автоматизированного тела с createElement / appendChild? - PullRequest
2 голосов
/ 29 января 2012

Создание таблицы без tbody с использованием javascript createElement / appendChild не добавит tbody в Firebug, но с помощью innerHTML сделает это. Зачем? Должны ли мы добавить тело вручную?

Ответы [ 2 ]

0 голосов
/ 29 января 2012

При использовании методов создания DOM необходимо предполагать, что вы хотите, чтобы структура была такой, как вы ее создали.

Если вы хотите обеспечить одинаковую структуру в разных браузерах, то да, вы всегда должны добавлять ее вручную, даже если JavaScript анализирует HTML. Не надейтесь на браузер, чтобы вставить его для вас, потому что браузеры могут вести себя не так в этом отношении.


Вот пример , который вы можете запустить в Firefox.

Он начинается с этой неверной разметки.

<p>
    <div>original</div>
</p>

<div> удаляется из <p> при разборе HTML, оставляя его визуализированным вот так ...

<p>‌</p>
<div>original</div>
<p></p>

Но если мы создаем идентичную структуру с помощью методов DOM, Firefox не вносит никаких исправлений.

var p = document.createElement('p');

p.appendChild(document.createElement('div'))
    .appendChild(document.createTextNode('new'));

document.body.appendChild(p);

Таким образом, в результате DOM теперь это ...

<p>‌</p>
<div>original</div>
<p></p>

<p>
    <div>new</div>
</p>

Таким образом, вы можете видеть, что даже в случае совершенно недопустимой структуры он не вносит исправления, которые вы увидите при анализе HTML.

В конечном итоге, вам не следует полагаться на обычные настройки или исправления браузера, поскольку нет гарантии, что они будут одинаковыми в разных браузерах.

Используйте правильно структурированный и корректный HTML, и вы избежите проблем.

0 голосов
/ 29 января 2012

Поскольку начальный и конечный теги для элемента tbody являются необязательными.Вы обходите вставку тегов, напрямую манипулируя узлами DOM.

Должны ли мы добавлять тело вручную?

Это несколько субъективно.

...