无法从其父级替换iframe内的div

时间:2010-07-03 13:01:36

标签: jquery html iframe

我有一个像我这样填写的iframe:

var usableUrl = unescape(url);
var iframe = $("<iframe id='pageContentDownloader' name='pageContentDownloader' style='display:block'></iframe>");
$("body").append(iframe);
iframe.load(usableUrl, null, ondocloaded);
iframe.css({ "width": $(window).width(), "height": $(window).height(), "border": "0px" });

稍后,我想使用其自身的修改版本替换所有&lt; p&gt; s和&lt; div&gt; s:

$("#pageContentDownloader").contents().find("p, div")
            .each(function () {
                var para = $(this).text();
                var words = para.split(" ");
                var aWords = new Array();
                $.makeArray(words, aWords);
                var newPara = makePara(aWords);
                $(this).replaceWith(newPara);
            });

但由于某种原因,最后一个命令不起作用。我可以看到$(this)是iframe中的原始段(我可以看到它的内容,我知道它是para的原始未修改版本),而newPara肯定包含适当修改的内容。

$(this).replaceWith()似乎无法正常工作。关于使用replaceWith API docs中的文字元素替换标签的问题的评论不适用于此,因为替换是&lt; div&gt;填写&lt; span&gt; s。

这是一些奇怪的&lt; iframe&gt; /查询1.4+问题吗?我已经在HTML5,XHTML和IE8以及Chrome 5 beta上进行了测试。所有这些都给我一个空的iframe。

1 个答案:

答案 0 :(得分:2)

你没有展示newPara()做了什么,但如果它创建了一个新的DOM元素,那么这可能是问题的根源:你隐式地将节点从一个文档移动到另一个文档。 可以是iframe不会对此感兴趣(虽然原则上应该有一条错误消息。)

如果确实如此,则必须在iframe中创建DOM元素,或插入原始HTML而不是成品节点。

您可以尝试使用$(iframe).document.createElement("p");来创建元素

$(html)有第二个参数ownerDocument。在创建要替换的元素时,尝试将$(iframe).document明确指定为ownerDocument。