javascript - Lägga till HTML i containerelement utan innerHTML
Jag behöver ett sätt att lägga till HTML till ett container-element utan att använda innerHTML. Anledningen till att jag inte vill använda innerHTML är för att när det används så här:
element.innerHTML += htmldataDet fungerar genom att först ersätta all HTML innan den gamla HTML-koden plus den nya HTML-koden läggs till. Detta är inte bra eftersom det återställer dynamiska medier såsom inbäddade flashvideor...
Jag kunde göra det på det här sättet vilket fungerar:
var e = document.createElement('span');
e.innerHTML = htmldata;
element.appendChild(e);
Problemet med det sättet är dock att det nu finns en extra span-tagg i dokumentet som jag inte vill ha.
Hur kan detta göras då? Tack!
Svar #1
Kolla in insertAdjacentHTML()-metoden. Den första parametern är var du vill att strängen ska läggas till och tar ("beforebegin", "afterbegin", "beforeend", "afterend"). I OP:s situation skulle du använda "beforeend". Den andra parametern är bara HTML-strängen.
Grundläggande användning:
var d1 = document.getElementById('one');
d1.insertAdjacentHTML('beforeend', '<div id="two">two</div>');
Svar #2
För att ge ett alternativ (eftersom användning av DocumentFragment verkar inte fungera): Du kan simulera det genom att iterera över barnen i den nygenererade noden och bara lägga till dem.
var e = document.createElement('div');
e.innerHTML = htmldata;
while(e.firstChild) {
element.appendChild(e.firstChild);
}
Svar #3
alnafie har ett bra svar på den här frågan. Jag ville ge ett exempel på hans kod som referens:
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>Förhoppningsvis är detta till hjälp för andra.
