我有一个网页是在其内具有一个HTML文档的iframe。 我需要从子文档访问iframe的ID,和我有没有运气得到它使用jQuery。 基本结构是这样的我的页面中:
<div id="ContainingDiv">
<iframe id="ContainingiFrame">
<html>
<head></head>
<body>
</body>
</html>
</iframe>
</div>
在我的JavaScript方法我可以在任何<body>
使用jQuery选择标签,但为了调整其大小不能检索iframe元素。 我已经尝试了一些东西,但我不承认jQuery中的DOM导航的专家,特别是在iframe的情况(在iframe是在同一个域中包含页。)有没有一种方法,我可以做到这一点?
无需jQuery的根本。 为了让你的父母的身体的对象,你可以这样做:
var parentBody = window.parent.document.body
如果是在同一个域中,你是从,一旦你有,你可以在对象上使用普通的JavaScript运行代码的iframe的:
window.parent.document.getElementById("ContainingiFrame").style.height = "400px";
或使用jQuery:
$("#ContainingiFrame", parentBody).height("400");
以下是有关使用示例代码从iframe中调整的iframe的文章: http://www.pither.com/articles/2010/11/12/resize-iframe-from-within
而且,在调整基于它自己的内容的iframe相关提问/回答: 调整大小的iframe基于内容
要在自己的iframe访问父的文档您可以将参数添加到您的选择,默认为文档,但没有什么能阻止你改变的背景下window.parent.document是这样的:
$('#ContainingiFrame', window.parent.document).whatever();
或者你选择之前添加:
window.parent.$('#ContainingiFrame').whatever();
如果你没有使用iframe(如标识符与查询)的信息,那么你要使用的frameElement窗口如下的:
var iframe_tag_in_parent_window = window.frameElement;
现在你有iframe标签本身可直接与它在JavaScript工作。
要使用的,而不是普通的JavaScript jQuery的,您使用以下命令:
var iframe_in_jquery = jQuery(window.frameElement, window.parent.document);
我们刚才讲的第一部分( window.frameElement
)。 第二部分是在其中jQuery将找到元素,敷的上下文。 这是我们当前窗口的父文件。
例如,如果你在一个唯一的ID iframe
标签,你可以这样做:
var iframe_in_jquery = jQuery(window.frameElement, window.parent.document),
id = iframe_in_jquery.attr("id");
现在id
是,如果标识iframe
JavaScript代码在运行之中。
PS如果window.frameElement
为空或未定义,那么你就不是在iframe
。
PPS注意,在父窗口中运行代码,您可能需要使用的父实例jQuery()
; 这是用做window.parent.jQuery(...)
如果您尝试尤其如此trigger()
事件!
PPPS确保使用window.frameElement
而不仅仅是frameElement
......一些浏览器有所打破,他们不会总是能够访问正确的数据,如果不是完全合格的(虽然在2016年问题可能得到解决?)
试试这个:
调整里面的一些元素iframe
:
$('#ContainingiFrame', window.parent.document).find('#someDiv').css('height', '200px');
或者只是调整iframe
:
$('#ContainingiFrame', window.parent.document).height('640');
试试这个:
$("#ContainingiFrame").contents().find("#someDiv");
如果你有一个内部元素的引用iframe
,并需要找到其父iframe
尤其是当你有一个以上的I帧,这里是发现它的方式。
var $innerElement;//element inside iframe
var $iframeBody = $innerElement.closest('body');
var $parentIframe = $('iframe').filter(function () {
return $(this).contents().find('body')[0] == $iframeBody[0];
});