使用jQuery获取框架内的元素

24

我正在尝试访问嵌套在框架内的一个元素,但到目前为止没有成功。我已经阅读了很多在stackoverflow上的示例和jQuery文档,但我看到的所有示例都是关于iFrames的,这些与传统框架的表现不同。我的页面结构如下所示(实际内容已删除):

<html>
<head></head>
<frameset>
<frame name="Menu"><html><body>
    <!--Menu contents-->
</body></html></frame>

<frameset>
<frame name="SettingsTree"><html><body>
    <!--Setting options-->
</body></html></frame>
<frame name="SettingsGrid" id="SettingsGrid"><html><body>
    <div id="findthis"></div>
    <!--Setting grid values-->
</body></html></frame>
</frameset>

</frameset>
</html>

获取 iFrame 中 "findthis" 的内容的方法是:

$('#SettingsGrid').contents().find('#findthis')

然而这并没有返回任何内容。$('#SettingsGrid')对象存在,长度为1,并且具有我期望的所有HTML内容。但是当我在该对象上调用.contents()时,它没有返回任何内容。我不知道这是因为它还没有正确加载到DOM中,还是由于其他问题。

5个回答

49

Firebug告诉我:错误:拒绝访问属性“document” - sinsedrix

1

如果框架有名称和ID,以下方法适用于我:

$('#frame_id',top.frames["frame_name"].document) ...

1

我在IE8 / IE11企业模式下使用jQuery 1.11.1的最佳解决方案是:

$('#findthis', $('#SettingsGrid')[0].contentWindow.document)

0
你试过 $('#findthis', $('#SettingsGrid')) 吗?
外层 jquery 的第二个参数是在第一个参数中引用的搜索要使用的上下文。当没有第二个参数时,默认为根目录。

我原以为这会起作用,因为如果你在SettingsGrid的上下文中,你应该能够找到该元素,但也许是由于框架的原因导致失败了。不过还是谢谢你的建议。 - Jeff Fol

0
对我来说,实现这个的好方法是通过查找类别框架,然后使用jQuery的prop()方法和contentwindow。不幸的是,在这个框架中必须声明一些函数来执行任务,例如findAndsubmitForms()方法。
父窗口:
$('.frameClass or #id or so').prop('contentWindow').findAndSubmitForms();

子窗口(框架):

function findAndSubmitForms(){
    $('form').submit();
    }

如果在框架内声明这样的方法不可行,当然可以通过以下方式定义它:
$('.frameClass').prop('contentWindow').findAndSubmitForms=function(){...};

然后调用我们想要的函数 :d

祝你有美好的一天,愉快地注视屏幕 :D


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接