我有一个像我这样填写的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。
答案 0 :(得分:2)
你没有展示newPara()
做了什么,但如果它创建了一个新的DOM元素,那么这可能是问题的根源:你隐式地将节点从一个文档移动到另一个文档。 可以是iframe不会对此感兴趣(虽然原则上应该有一条错误消息。)
如果确实如此,则必须在iframe中创建DOM元素,或插入原始HTML而不是成品节点。
您可以尝试使用 $(iframe).document.createElement("p");
来创建元素
$(html)
有第二个参数ownerDocument
。在创建要替换的元素时,尝试将$(iframe).document
明确指定为ownerDocument。