IE7是否不完全支持JavaScript的insertBefore方法?

5

我有以下代码,在Chrome、IE8和FF中都可以完美运行。但是在测试IE7时,出现了错误。有人知道这是怎么回事吗?

 function do_replace(s, p1,p2,p3,child_node,syn_text) {
       reg = new RegExp('[h\|H][1-7]');
   if(p1.length>0){   //this might not be necessary
     //create textnode
      var text_node = document.createTextNode(p1);
          child_node.parentNode.insertBefore(text_node,child_node);  //errors out here in IE7
       }

代码在最后一行出现错误- 当我通过调试器查看代码时,IE7会给出一个“htmlfile: Invalid argument.”的错误。当运行此脚本时,child_node、parentNode和text_node似乎与Firefox和Chrome形成相同。

有什么想法吗?还是说IE7不像其他浏览器那样支持这种方法?

谢谢


根据微软的说明,IE6+应该支持insertBefore。http://msdn.microsoft.com/en-us/library/ms536454(v=vs.85).aspx 你看到他们的备注了吗:“在插入第一个子节点时不要指定oChildNode参数。如果已经存在子级且未指定oChildNode参数,则oNewNode成为父对象的最后一个子级。” - Detect
2个回答

4

我找到了代码的问题并加以解决,而不是让这个问题一直存在:

我使用了一个非常复杂的框架集(呕吐!),当我调用text_node = document.createTextNode()时,我没有在我的应用程序所在的框架中执行该操作。

我通过明确指定创建对象的框架来解决了这个问题:

var text_node = MainFrame.child_frame.WhySoManyFrames.document.createTextNode(p1);

在这之后,insertBefore方法完美地运行!希望这可以帮助任何看到这个问题的人-我知道这让我花了很长时间和很多沮丧来解决!

1

JavaScript的“InsertBefore”函数受IE7支持。请记住,您必须仅在页面完全加载后使用此函数

详细信息


那是一个很好的建议-我尝试将调用出错的函数的代码放置在body onload()调用中,以确保它在所有内容加载后被调用。问题仍然存在。我正在试图将问题简化为一个简单的网页。不过还是谢谢您的回复! - user210099

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接