Подтвердить что ты не робот

Добавляйте элементы в DOM, используя простой текстовый HTML, используя только чистый JavaScript (без jQuery)

Мне нужно иметь возможность добавлять элементы на страницу с использованием исходной текстовой строки HTML, включая любое количество тегов, атрибутов и т.д. В идеале я хотел бы сделать что-то вроде любой произвольной строки хорошо сформированной HTML;

 var theElement = document.createElement("<h1 id='title'>Some Title</h1><span style="display:inline-block; width=100px;">Some arbitrary text</span>");

document.getElementById("body").appendChild(theElement);

Очевидно, что это не работает, я ищу хорошие способы достижения такого же результата. Я бы хотел, чтобы избежать разбора HTML, если это возможно. Я сильно ограничен инструментами, которые я могу использовать, ни один jQuery или снаружи не включает и должен быть кросс-браузерным и обратно совместимым с IE6. Любая помощь будет огромной.

4b9b3361

Ответ 1

Попробуйте присвоить innerHTML свойство анонимного элемента и добавить все его children.

function appendHtml(el, str) {
  var div = document.createElement('div');
  div.innerHTML = str;
  while (div.children.length > 0) {
    el.appendChild(div.children[0]);
  }
}
var html = '<h1 id="title">Some Title</h1><span style="display:inline-block; width=100px;">Some arbitrary text</span>';
appendHtml(document.body, html); // "body" has two more children - h1 and span.

Ответ 2

var el =  document.createElement("h1")
el.id="title";
el.innerHTML = "Some title";
document.body.appendChild(el);

var el2 =  document.createElement("span")
el2.style.display="block";
el2.style.width="100%";
el2.innerHTML = "Some arb text";
document.body.appendChild(el2);

Шоуд (скрипка: http://jsfiddle.net/gWHVy/)

edit: Это решение для специального случая, в котором вы знаете свойства прямых детей того, что вы хотите вставить. Взгляните на решение Аарона, которое работает в общем случае.

Ответ 3

Вы можете получить elementId элемента, под которым вы хотите вставить HTML, и использовать innerHTML для добавления html.

document.getElementById("body").innerHTML = "<h1 id='title'>Some Title</h1><span>test</span>";

Ответ 4

Вы можете использовать insertAdjacentHTML:

document.body.insertAdjacentHTML("beforeend", theHTMLToInsert);

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

Живой пример:

document.body.insertAdjacentHTML("beforeend", "<div>This is the new content.</div>");
<div>Existing content in <code>body</code>.</div>

Ответ 5

Решение

maerics немедленно устранило мою проблему. Мне, однако, нужно было быстро настроить его, чтобы делать то, что мне нужно. У меня есть несколько сценариев и таблиц стилей, которые загружаются при нажатии. Я не могу добавить сценарии или таблицы стилей как фактические объекты в DOM после загрузки. Если вы установите innerHTML, скажем, document.body, чтобы содержать часть <link rel="stylesheet" />, он будет печатать только текст, и браузер не узнает его как объект ссылки. Чтобы исправить это, я использовал следующий код.

function appendHtml(el, str) {
  var div = document.createElement('div');
  div.innerHTML = str;
  while (div.children.length > 0) {
      if ( div.children[0].tagName == 'LINK' ) {
          // Create an actual link element to append later
          style = document.createElement('link');
          style.href = div.children[0].href;
          // append your other things like rel, type, etc
          el.appendChild(style);
      }
      el.appendChild(div.children[0]);
  }
}