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