[让我的代码无法在IE9中工作时遇到了一些严重的麻烦,在Chrome和Firefox中可以正常工作,但是我抛出了一些错误。这是我的2个功能:
function insertHTML(content){
var body=document.getElementsByTagName('body');
body[0].appendChild(createElement(content));
}
function createElement(string){
var container=document.createElement('div');
container.innerHTML=string;
var element=container.firstChild.cloneNode(true);
return element;
}
我已经尝试过严格的方法,但似乎都没有用,我将确切解释我需要做什么...
...我需要从html字符串创建一个新元素,该字符串是从ajax调用发送回的,因此我的脚本几乎不知道它包含的内容,直到得到它为止。
我确实尝试使用element.innerHTML,但这不好,因为如果我在屏幕上有一个html元素(窗体),并且用户向其中输入数据,然后在插入另一个元素时,它将擦除所有用户-从第一个表格输入数据。我在做element.innerHTML + = newData;
所以基本上,我需要两件事:
1)一种从html字符串创建新元素的方法。2)一种将元素附加到文档主体的方法。
所有这些都需要跨浏览器工作,并且不允许使用jQuery,而且div父项中也不能包含新元素,它必须具有主体作为其父项。
非常感谢您的帮助,
理查德
innerHTML是可读写的,它将破坏div中的所有内容。使用时要格外小心
function insertHTML( htmlString ){
var bodEle = document.getElementsByTagName('body');
var divEle = createElement("div");
divEle.innerHTML = htmlString;
bodEle.appendChild(divEle);
}
所以基本上,我需要两件事:
- 一种通过html字符串创建新元素的方法。
- 将元素附加到文档主体的方法。
所有这些都需要跨浏览器工作,并且不允许使用jQuery,而且div父项中也不能包含新元素,它必须具有主体作为其父项。
以下内容已在IE8中进行了测试
<!DOCTYPE html>
<html>
<body>
<script>
var divBefore = document.createElement('div');
var divAfter = document.createElement('div');
var htmlBefore = '<span><span style="font-weight: bold">This bold text</span> was added before</span>';
var htmlAfter = '<span><span style="font-weight: bold">This bold text</span> was added after</span>';
divBefore.innerHTML = htmlBefore;
divAfter.innerHTML = htmlAfter;
document.body.appendChild(divBefore);
setTimeout(function() {
document.body.appendChild(divAfter);
}, 0);
</script>
<div>This content was here first</div>
</body>
</html>
渲染
This bold text was added before
This content was here first
This bold text was added after
https://www.browserstack.com/screenshots/7e166dc72b636d3dffdd3739a19ff8956e9cea96
在上面的示例中,如果您不需要在正文之前添加内容(即在已存在的内容之前插入内容),则只需将script标签放置在原始内容之后,而不使用setTimeout
。
<!DOCTYPE html>
<html>
<body>
<div>This content was here first</div>
<script>
var divAfter = document.createElement('div');
var htmlAfter = '<span><span style="font-weight: bold">This bold text</span> was added after</span>';
divAfter.innerHTML = htmlAfter;
document.body.appendChild(divAfter);
</script>
</body>
</html>