使用jQuery在Frame中获取元素

时间:2012-01-08 17:44:27

标签: jquery html frame

我正在尝试访问一个框架内部的元素,但到目前为止还没有任何运气。我在这里阅读了很多关于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中,或者是否存在其他问题。

4 个答案:

答案 0 :(得分:41)

试试这个:

$('#findthis', window.parent.frames[0].document)

或者从顶层:

$('#findthis', top.window.frames[0].document)

参见上一个问题/答案:Run JQuery in the context of another frame

答案 1 :(得分:1)

如果框架有一个名称和一个id:

,这对我有用
$('#frame_id',top.frames["frame_name"].document) ...

答案 2 :(得分:0)

您是否尝试过$('#findthis', $('#SettingsGrid'))

外部jquery中的第二个参数是用于进行第一个参数引用的搜索的上下文。如果没有给出第二个参数,则默认为root。

答案 3 :(得分:0)

对我来说,这样做的好方法是逐个查找框架,而不是使用jquery的prop()方法和contentwindow。不幸的是,在这个框架中必须由某个为您执行任务的函数声明,例如findAndsubmitForms()方法。

父窗口:

$('.frameClass or #id or so').prop('contentWindow').findAndSubmitForms();

子窗口(框架):

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

如果无法在框架内声明这样的方法,当然可以通过这样定义来完成:

$('.frameClass').prop('contentWindow').findAndSubmitForms=function(){...};

并且打电话给我们想要的功能:d

祝你有个美好的一天,祝你在看屏幕时感觉愉快:D