将HTMLstring附加到DOM

如何附加这个HTMLstring

var str = '<p>Just some <span>text</span> here</p>'; 

到DOM中的'test' ,这是在DOM的DIV?

(顺便说一句div.innerHTML += str;是不可接受的。)

使用insertAdjacentHTML(如果可用),否则使用某种回退。 insertAdjacentHTML将在Firefox 8中受支持,并且在Safari 4,Chrome,IE和Opera中也受支持,根据https://developer.mozilla.org/en/DOM/element.insertAdjacentHTML

 div.insertAdjacentHTML( 'beforeend', str ); 

现场演示: http : //jsfiddle.net/euQ5n/

这可以接受吗?

 var child = document.createElement('div'); child.innerHTML = str; child = child.firstChild; document.getElementById('test').appendChild(child); 

jsFiddle 。

但是 , 尼尔的答案是一个更好的解决scheme。

这个想法是在中间元素上使用innerHTML ,然后通过appendChild将其所有的子节点移动到你真正想要的地方。

 var target = document.getElementById('test'); var str = '<p>Just some <span>text</span> here</p>'; var temp = document.createElement('div'); temp.innerHTML = str; while (temp.firstChild) { target.appendChild(temp.firstChild); } 

这样可以避免在div#test上清除任何事件处理程序,但仍然允许附加一串HTML。

正确的方法是使用insertAdjacentHTML 。 在8之前的Firefox中,如果str包含script标记,则可以使用Range.createContextualFragment

如果str包含script标记,则在插入片段之前,需要从createContextualFragment返回的片段中删除script元素。 否则,脚本将运行。 ( insertAdjacentHTML标记脚本insertAdjacentHTML执行。)

为什么这是不可接受的?

document.getElementById('test').innerHTML += str

将是教科书的做法。

beforebegin和afterend职位只有在节点在树中并且具有父元素时才起作用。 – https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML