将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