Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态地将HTML字符串插入文档的头部_Javascript_Html_Dom - Fatal编程技术网

Javascript 动态地将HTML字符串插入文档的头部

Javascript 动态地将HTML字符串插入文档的头部,javascript,html,dom,Javascript,Html,Dom,我需要在当前文档DOM的标记中插入一个HTML字符串,一种方法是:创建一个div元素,填充其内部HTML,逐项复制到元素中。但由于以下原因,这些方法在IE/Opera中不起作用,尽管在FF3中,以下两种方法都能很好地工作,并且浏览器会处理添加的样式/脚本元素 是否有其他方法可以将字符串直接插入并处理这些项目 (为什么他们在IE/Opera中失败) 方法1-失败,因为innerHTML无法解析/忽略字符串中的元、样式和脚本元素 insertHtml = function(parentElem,h

我需要在当前文档DOM的
标记中插入一个HTML字符串,一种方法是:创建一个div元素,填充其内部HTML,逐项复制到
元素中。但由于以下原因,这些方法在IE/Opera中不起作用,尽管在FF3中,以下两种方法都能很好地工作,并且浏览器会处理添加的样式/脚本元素

是否有其他方法可以将字符串直接插入
并处理这些项目


(为什么他们在IE/Opera中失败)

方法1-失败,因为innerHTML无法解析/忽略字符串中的元、样式和脚本元素

insertHtml = function(parentElem,htmlStr){

   var frag = document.createDocumentFragment();
   var temp = document.createElement('div');
   temp.innerHTML = htmlStr;

   // at this point, temp.childNodes.length=0

   while (temp.firstChild) {
       frag.appendChild(temp.firstChild);
   }
   // use native DOM methods to insert the fragment
   parentElem.insertBefore(frag, parentElem.childNodes[0]);
}

方法2-失败,因为浏览器无法处理添加的样式/脚本元素

 document.getElementsByTagName("head")[0].innerHTML = htmlStr
 // although this populates the <head> tag successfully
document.getElementsByTagName(“head”)[0]。innerHTML=htmlStr
//尽管这成功地填充了标记

这里有一个愚蠢的黑客解决了这个问题。将一个非空字符串标记(node.nodeType==3)预先添加到htmlStr,一切都将正常工作:

var insertHtml = function(parentElem, htmlStr){

   var frag = document.createDocumentFragment();
   var temp = document.createElement('div');
   temp.innerHTML = "hack" + htmlStr;

   while (temp.firstChild) {
       if (temp.firstChild.nodeType === 1) {
            // add only element nodes
            frag.appendChild(temp.firstChild);
       } else {
            // remove the hack string
            temp.removeChild(temp.firstChild);
       }
   }

   parentElem.insertBefore(frag, parentElem.childNodes[0]);
}

如果您使用第一个函数,但将“div”更改为“head”,那么IE/Opera会在innerHTML赋值后崩溃。显然你不能创建元素(“头”)!!虽然Opera9/FF3/Safari4可以正常工作,但是添加的样式/脚本元素仍然没有被IE7处理。当我带着IE8和IE7模式的IE8回到家中时,我会试试看是否可以解决这些问题。我在上面的设置中进行了测试,它似乎可以工作。我没有一个纯IE7安装可以测试。那太好了,因为我使用的代码与您自己的非常相似,所以希望它能在生产环境中工作:)