Как добавить эту HTML-строку
var str = '<p>Just some <span>text</span> here</p>';
в DIV с идентификатором, 'test'
который находится в DOM?
(Кстати, div.innerHTML += str;
это не приемлемо.)
javascript
html
dom
browser
Шиме Видас
источник
источник
innerHTML
помещает строку в элемент (заменяя всех дочерних элементов), тогда какinsertAdjacentHTML
помещает ее (1) перед элементом, (2) после элемента, (3) внутри элемента перед первым дочерним элементом или (4) внутри элемента после последнего дочернего элемента.insertAdjacentHTML
быстрее, чем добавление кinnerHTML
, потомуinsertAdjacentHTML
что не сериализует и не повторно анализирует существующие дочерние элементы элемента.insertAdjacentHTML
сохраняет значения измененных элементов формы, тогда как добавление кinnerHTML
перестраивает элемент и теряет весь контекст формы.Это приемлемо?
jsFiddle .
Но , ответ Нила является лучшим решением.
источник
innerHTML
?insertAdjacentHTML
.Производительность
AppendChild
(E) более чем в 2 раза быстрее, чем другие решения для Chrome и Safari,insertAdjacentHTML
(F) является самым быстрым в firefox.innerHTML=
(B) (не путать с+=
(А)) является вторым быстрым решением во всех браузерах , и это гораздо удобнее , чем Е и F.подробности
Настройка среды (2019.07.10) MacOs High Sierra 10.13.4 в Chrome 75.0.3770 (64-разрядная версия), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64-разрядная версия)
Вы можете воспроизвести тест на своей машине здесь
Показать фрагмент кода
источник
Идея состоит в том, чтобы использовать
innerHTML
промежуточный элемент, а затем переместить все его дочерние узлы туда, где они действительно нужныappendChild
.Это позволяет избежать уничтожения любых обработчиков событий,
div#test
но по-прежнему позволяет добавлять строку HTML.источник
Правильный способ - использовать
insertAdjacentHTML
. В Firefox ранее 8 вы можете вернуться к использованию,Range.createContextualFragment
если ваш тегstr
не содержитscript
тегов.Если у вас
str
естьscript
теги, вам необходимо удалитьscript
элементы из фрагмента, возвращаемогоcreateContextualFragment
перед вставкой фрагмента. В противном случае скрипты запустятся. (insertAdjacentHTML
отмечает скрипты как невыполнимые.)источник
createContextualFragment
. Я искал способ сделать некоторые html-включения со сценариями, запускаемыми только в том случае, если пользователь соглашается установить cookie.Быстрый взлом :
Случаи использования :
1: Сохраните как файл .html и запустите в Chrome, Firefox или Edge. (IE не работает)
2: использовать в http://js.do
В действии: http://js.do/HeavyMetalCookies/quick_hack
Разбитые с комментариями:
Причина, по которой я опубликовал:
У JS.do есть два обязательных элемента:
Но не показывает сообщения console.log. Пришел сюда в поисках быстрого решения. Я просто хочу увидеть результаты нескольких строк кода блокнота, другие решения требуют слишком много работы.
источник
Почему это неприемлемо?
document.getElementById('test').innerHTML += str
было бы учебным способом сделать это.
источник
#test
. Обычно это нежелательно.Это может решить
источник
InnerHTML очищает все данные, такие как событие, для существующих узлов
append child с firstChild добавляет только первого ребенка в innerHTML. Например, если нам нужно добавить:
будет отображаться только text1
Как насчет этого:
добавляет специальный тег в innerHTML, добавляя дочерний элемент, а затем редактирует внешний HTML, удаляя созданный нами тег. Не знаю, насколько это умно, но у меня это работает, или вы можете изменить externalHTML на innerHTML, чтобы не использовать замену функции
источник
Самый короткий - 18 символов (не путать
+=
(упоминание OP) с=
более подробной информацией здесь )Показать фрагмент кода
источник