IE9,Javascript:创建并添加新元素

问题描述 投票:0回答:2

[让我的代码无法在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父项中也不能包含新元素,它必须具有主体作为其父项。

非常感谢您的帮助,

理查德

javascript append element internet-explorer-9
2个回答
0
投票

innerHTML是可读写的,它将破坏div中的所有内容。使用时要格外小心

function insertHTML( htmlString ){
    var bodEle = document.getElementsByTagName('body');
    var divEle = createElement("div");
    divEle.innerHTML = htmlString;
    bodEle.appendChild(divEle);
}

0
投票

所以基本上,我需要两件事:

  1. 一种通过html字符串创建新元素的方法。
  2. 将元素附加到文档主体的方法。

所有这些都需要跨浏览器工作,并且不允许使用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>
© www.soinside.com 2019 - 2024. All rights reserved.