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
, если вы не хотите ничего заменить - просто добавьте новые данные.