По моему опыту, большую часть времени браузер пытается исправить HTML 1 перед его внедрением в DOM. Если вы хотите построить <ul>
так:
someElement.innerHTML += '<ul>';
someElement.innerHTML += '<li>some li</li>';
someElement.innerHTML += '<li>some other li</li>';
someElement.innerHTML += '</ul>';
Например, Chrome, который привел бы к:
<ul></ul>
<li>some li</li>
<li>some other li</li>
<ul></ul>
Таким образом, innerHTML может дать непредсказуемые результаты, потому что каждый раз, когда вы его используете, браузер корректирует HTML-код (и браузеры отличаются в том, как они это делают). Это особенно верно для элементов таблицы / таблицы (и особенно в IE (кстати, MS изобрела innerHTML
;)). Если вы хотите, чтобы ваш html был абсолютно таким, каким вы предполагали его, придерживайтесь методов DOM (createElement
/ appendChild
и т. Д.) Или сначала создайте строку полного элемента, который вы хотите вставить используя innerHTML, затем вставьте его, другими словами, не используйте innerHTML
со строками, содержащими неполный HTML.
Чтобы завершить, я привожу из причудливого режима ППК :
Если вы удаляете элементы через
innerHTML в IE, их содержание
вытер и только сам элемент
(т.е. открывающий и закрывающий теги)
остаются. Если вы хотите удалить узлы
что вы можете захотеть вставить
позднее используйте методы DOM, такие как
RemoveChild ()
1 более технически: я думаю, что каждый браузер применяет свой собственный алгоритм разбора фрагмента HTML .