Javascript 从iframe获取文本并设置范围

Javascript 从iframe获取文本并设置范围,javascript,html,iframe,range,Javascript,Html,Iframe,Range,我必须更改iframe中显示的HTML文档中部分文本的样式 我有一个json文件,其中有应该修改的文本的start/end/id 我的问题是无法设置文本范围 var r = document.createRange(); var node = document.getElementById("file").contentWindow.document.getElementById("d1e152"); r.setStart(node, 0); r.setEnd(node, 12); f

我必须更改iframe中显示的HTML文档中部分文本的样式

我有一个json文件,其中有应该修改的文本的start/end/id

我的问题是无法设置文本范围

 var r = document.createRange();
 var node = document.getElementById("file").contentWindow.document.getElementById("d1e152");
 r.setStart(node, 0);
 r.setEnd(node, 12);
file是iframe的id,而d1e152是段落的id。 它返回TypeError:Range.setStart的参数1不是对象。r.setStart行出错。

听起来像是节点为空。这可能是由于许多原因之一,但我猜您正在尝试在iframe完全加载之前检索iframe中的元素,因此需要使用window.setTimeout或事件处理程序等待

另一个不是您当前问题的问题是,最好在iframe的文档而不是主文档上创建范围。据我所知,这不重要,但我肯定在旧浏览器中看到过问题。我现在记不起细节了

var iframeDoc = document.getElementById("file").contentWindow.document;
var r = iframeDoc.createRange();
var node = iframeDoc.getElementById("d1e152");
r.setStart(node, 0);
r.setEnd(node, 12);

它似乎可以工作,但得到以下类型错误:Range.setStart的参数1不是对象。。如果我只是为了对iframeDoc.getElementByIdd1e152进行测试而附加.style.color='00CC00',它就会工作,并且文本是彩色的。谢谢你的支持help@Ciotto:一定是发生了其他情况,因为只有当节点为null或其他非对象时,才会出现您看到的错误,并且如果您尝试访问其样式属性,就会出现错误。我注意到这有时有效,有时无效。我尝试了以下方法:var iframedoc=document.getElementByIdfile.contentWindow.document;setTimeoutfunction{var r=iframedoc.createRange;var node=iframedoc.getElementByIdd1e152;r.setStartnode,0;r.setEndnode,5;[other.code],500;它有时也只能在没有setTimout函数的情况下工作。也许我在错误的位置使用了它?但是我很确定我只在加载iframe时运行此代码,因为我在这个函数之前做了一些控制。好的,在加载文档之前,现在我将此代码放在一个按钮上,现在没有问题了。谢谢你的帮助方法