Вы пытаетесь вставить контент в существующий элемент, не нарушая контент, который уже находится там?
Самый простой ответ - insertAdjacentHTML
.Это расширение для сценариев IE, поскольку оно стандартизировано HTML5:
mydiv.insertAdjacentHTML('afterBegin', '<p>Some new stuff</p><p>to prepend</p>');
К сожалению, оно не везде реализовано.Таким образом, в другом месте вам нужно создать новый элемент, установить на него innerHTML
и затем передать содержимое в цель:
var container= document.createElement('div');
container.innerHTML= '<p>Some new stuff</p><p>to prepend</p>';
while (container.lastChild)
mydiv.insertBefore(container.lastChild, mydiv.firstChild);
Если у вас много нового контента, это будет медленно.Вы можете ускорить его в браузерах, поддерживающих DOM Range, создав Range для нового содержимого, извлекая его в DocumentFragment и вставляя этот фрагмент в целевой узел за один раз.
К сожалению (опять же),используют insertAdjacentHTML
или innerHTML
, есть элементы, на которые IE <9 не будет устанавливать HTML: особенно <code><table> и его отношения.Таким образом, в этом случае вы должны заключить HTML в подходящую оболочку для имени элемента:
container.innerHTML= '<table><tbody>'+newRowsHTML+'</tbody></table>';
, а затем извлечь содержимое из внутреннего элемента, чтобы поместить его в цель.
хорошо, что в случае таблиц, если у вас много новых строк, вы можете поместить их в одно тело <tbody>
и insertBefore
/ appendChild
, чтобы поместить все строки за один раз, что быстрее, чемодин-на-один.