Javascript 试图在Internet Explorer(IE)上追加jQuery对象时,jQuery抛出SCRIPT5022:HierarchyRequestError

Javascript 试图在Internet Explorer(IE)上追加jQuery对象时,jQuery抛出SCRIPT5022:HierarchyRequestError,javascript,jquery,html,internet-explorer,Javascript,Jquery,Html,Internet Explorer,我试图使用jQuery插入一个HTML表作为div元素的子节点。我的代码如下所示: var table = $('#tableId').clone(); $('#divId').append(table); 这段代码在Chrome和Firefox上运行良好,没有问题,但是当我在Internet Explorer(IE)10上测试时,IE控制台抛出如下错误: SCRIPT5022:HierarchyRequestError 我的internet搜索指向此MSDN文档: 它指定错误消息:无法

我试图使用jQuery插入一个HTML表作为div元素的子节点。我的代码如下所示:

var table = $('#tableId').clone();

$('#divId').append(table);

这段代码在Chrome和Firefox上运行良好,没有问题,但是当我在Internet Explorer(IE)10上测试时,IE控制台抛出如下错误:

SCRIPT5022:HierarchyRequestError

我的internet搜索指向此MSDN文档:

它指定错误消息:无法在请求的位置插入节点。但是为什么呢

我尝试了prepend(),同样的错误。由于某些原因,我无法使用table.appendTo()。appendTo不适用于所有3种浏览器

如果有人能告诉我一些如何避开这件事的线索,我将不胜感激。谢谢

更新:您可以在这个JSFIDLE中看到效果:。试试Chrome和Firefox,它会起作用,然后试试IE

更新:将jQuery版本更改为1.11.0或2.1.0将使代码正常工作。但是如果试图将表追加到新窗口中的div元素中,请通过引用back window.opener.table:$('#divId').append(window.opener.table);这在IE中不起作用,尽管它在Firefox和Chrome中起作用


更新:我发现,当我完全跳过jQuery并使用内置JavaScript函数时,这种行为也会发生。我在这里提出了另一个问题:

这似乎是Internet Explorer的安全功能,您不能在Internet Explorer中将DOM节点或jQuery对象从一个窗口附加到另一个窗口,即使是那些满足相同来源标准并且在其他浏览器中工作的节点,也不能在打开的窗口和打开器之间传递

如果您有一个jQuery对象,那么您可以将其转换为DOM元素,并使用outerHTML,如下所示-

var table = $('#tableId').clone(), tableHtml = table[0].outerHTML;
$('#divId')[0].innerHTML = tableHtml ;
或者,您可以坚持使用纯JavaScript并编写-

var tableHtml = document.getElementById('tableId').outerHTML;
然后可以通过如下设置所需DOM元素的innerHTML将其添加到窗口文档中-

var table = $('#tableId').clone(), tableHtml = table[0].outerHTML;
$('#divId')[0].innerHTML = tableHtml ;

我还没有看到任何实际的文档说明这一点,或给出其背后的理由,但我在其他StackOverflow问题中看到过引用,这肯定与我在使用Internet Explorer时看到的行为一致


在您的链接问题中向NoGray提示帽子。

您可以发布演示来重现该问题吗?请尝试我刚刚更新,谢谢。Id必须是唯一的,请尝试使用类。IE不允许附加跨窗口元素,即,如果在弹出窗口中创建元素,则无法将其附加到开场白的文档中。始终创建要附加到同一文档中的元素。不过,MSDN中似乎没有记录此功能。@phamductri取决于您深度复制元素的方式。jQuery可能仍然会在幕后创建文档元素。您可以尝试使用“append”
#tableId.outerHTML
。这应该适用于任何浏览器,尽管这不是很优雅的方式。