Javascript - добавление HTML в элемент контейнера без innerHTML

Мне нужен способ добавления HTML в элемент контейнера без использования innerHTML. Причина, по которой я не хочу использовать innerHTML, заключается в том, что когда она используется следующим образом:

element.innerHTML += htmldata

Он работает, заменяя все html первым, прежде чем добавлять старый html и новый html. Это не хорошо, потому что он сбрасывает динамические носители, такие как встроенные флеш-ролики...

Я мог бы сделать это таким образом, который работает:

var e = document.createElement('span');
e.innerHTML = htmldata;
element.appendChild(e);

Однако проблема заключается в том, что в этом документе есть тот дополнительный тег span, который мне не нужен.

Как это можно сделать? Спасибо!

Ответ 1

Чтобы дать альтернативу (поскольку использование DocumentFragment, похоже, не работает): вы можете имитировать его, итерации по дочерним элементам только что созданного node и только добавьте их.

var e = document.createElement('div');
e.innerHTML = htmldata;

while(e.firstChild) {
    element.appendChild(e.firstChild);
}

Ответ 2

Я удивлен, что ни один из ответов не упоминал метод insertAdjacentHTML(). Проверьте здесь. Первый параметр - это то, где вы хотите, чтобы строка добавлялась и принималась ( "beforebegin", "afterbegin", "preend", "afterend" ). В ситуации OP вы должны использовать "preend". Второй параметр - это только строка html.

Основное использование:

var d1 = document.getElementById('one');
d1.insertAdjacentHTML('beforeend', '<div id="two">two</div>');

Ответ 3

alnafie имеет отличный ответ на этот вопрос. Я хотел привести пример своего кода для справки:

var childNumber = 3;

function addChild() {
  var parent = document.getElementById('i-want-more-children');
  var newChild = '<p>Child ' + childNumber + '</p>';
  parent.insertAdjacentHTML('beforeend', newChild);
  childNumber++;
}
body {
  text-align: center;
}
button {
  background: rgba(7, 99, 53, .1);
  border: 3px solid rgba(7, 99, 53, 1);
  border-radius: 5px;
  color: rgba(7, 99, 53, 1);
  cursor: pointer;
  line-height: 40px;
  font-size: 30px;
  outline: none;
  padding: 0 20px;
  transition: all .3s;
}
button:hover {
  background: rgba(7, 99, 53, 1);
  color: rgba(255,255,255,1);
}
p {
  font-size: 20px;
  font-weight: bold;
}
<button type="button" onclick="addChild()">Append Child</button>
<div id="i-want-more-children">
  <p>Child 1</p>
  <p>Child 2</p>
</div>

Ответ 4

<div id="Result">
</div>

<script>
for(var i=0; i<=10; i++){
var data = "<b>vijay</b>";
 document.getElementById('Result').innerHTML += data;
}
</script>

назначьте данные для div с символом "+ =", вы можете добавлять данные, включая предыдущие данные html

Ответ 5

Вот что означало DocumentFragment.

var frag = document.createDocumentFragment();
var span = document.createElement("span");
span.innerHTML = htmldata;
for (var i = 0, ii = span.childNodes.length; i < ii; i++) {
    frag.appendChild(span.childNodes[i]);
}
element.appendChild(frag);

document.createDocumentFragment, .childNodes

Ответ 6

element.innerHTML *+=* htmldata - nope

try - element.innerHTML **=+** htmldata, если вы не хотите ничего заменить - просто добавьте новые данные.