2011-03-02 45 views
4

我有下面的代码,它可以在Chrome,IE8和FF中完美工作。但是,当我使用IE7测试时出现错误。有人知道这里发生了什么吗?IE7不完全支持JavaScript的insertBefore方法吗?

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:无效的参数”。当我通过调试器查看代码时发生错误。 child_node,parentNode和text_node在运行此脚本时似乎与Firefox和Chrome相同。

任何想法?或者IE7不支持这种方法以及其他浏览器?

谢谢

+0

根据MS,IE6 +应该支持insertBefore。 http://msdn.microsoft.com/en-us/library/ms536454(v=vs.85).aspx您是否看到过他们的评论:“插入第一个子节点时,不要指定oChildNode参数。如果子节点已经存在并且您不指定oChildNode参数,则oNewNode将成为父对象的最后一个子项。“ – Detect 2011-03-02 19:21:15

回答

3

而不是离开这个问题没有解决,我想通了,什么是错我的代码:

我用的是一个广泛的框架(呸!),当我做了text_node = document.createTextNode()电话,我。

var text_node = MainFrame.child_frame.WhySoManyFrames.document.createTextNode(p1); 
:在我的应用程序是在框架中并没有这样做

我通过显式调用从框架中创建对象解决了这个

完成此操作后,insertBefore方法完美无缺!

希望这可以帮助任何人看这个问题 - 我知道这花了我很长时间,很多挫折找出!

1

JavaScript'InsertBefore'功能被IE7支持。请记住,您必须仅在页面完全加载时使用此功能

Details

+0

这是一个很好的建议 - 我试着把调用函数的代码放在一个正文onload()调用中,只是为了确保在加载完所有内容后调用它。问题仍然发生。我正在试图将问题提炼成简单的网页。感谢您的回复! – user210099 2011-03-02 21:11:25