我有一个包含iframe的页面,其中包含一个html文档。我需要从那个子文档中访问iframe的id,并且没有运气使用jQuery。基本结构就在我的页面中:
<div id="ContainingDiv">
<iframe id="ContainingiFrame">
<html>
<head></head>
<body>
</body>
</html>
</iframe>
</div>
在我的javascript方法中,我可以使用jQuery选择器访问<body>
标记中的任何内容,但无法检索iframe元素以调整其大小。我已经尝试过一些东西,但我确实不是jQuery DOM导航方面的专家,特别是在涉及iframe的情况下(iframe与包含页面在同一个域中。)有没有办法可以做到这一点?
答案 0 :(得分:20)
根本不需要jQuery。要获取父级的body对象,可以执行以下操作:
var parentBody = window.parent.document.body
如果它与您运行代码的iframe位于同一个域中,那么一旦您拥有该代码,就可以在该对象上使用普通的javascript:
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大小的相关问题/答案:Resizing an iframe based on content
答案 1 :(得分:9)
要从iframe访问父文档,您可以向选择器添加参数,默认为文档,但没有什么可以阻止您将上下文更改为window.parent.document,如下所示:
$('#ContainingiFrame', window.parent.document).whatever();
或者在选择器之前添加它:
window.parent.$('#ContainingiFrame').whatever();
答案 2 :(得分:5)
如果您没有关于iframe的信息(例如要查询的标识符),那么您想要使用窗口的frameElement,如下所示:
var iframe_tag_in_parent_window = window.frameElement;
现在您拥有iframe标记本身,可以直接在JavaScript中使用它。
要使用jQuery而不是纯JavaScript,请使用以下命令:
var iframe_in_jquery = jQuery(window.frameElement, window.parent.document);
我们刚刚谈到了第一部分(window.frameElement
)。第二部分是jQuery将找到元素并将其包装起来的上下文。这是我们当前窗口的父文档。
例如,如果您在iframe
标记中有唯一ID,则可以执行以下操作:
var iframe_in_jquery = jQuery(window.frameElement, window.parent.document),
id = iframe_in_jquery.attr("id");
如果您的JavaScript代码遇到id
,则iframe
是标识符。
P.S。如果window.frameElement
为null或未定义,则表示您不在iframe
。
P.P.S请注意,要在父窗口中运行代码,您可能需要使用jQuery()
的父实例;这是使用window.parent.jQuery(...)
完成的。如果您尝试trigger()
活动,则尤其如此!
P.P.P.S。确保使用window.frameElement
而不只是frameElement
...某些浏览器有些破坏,如果不完全合格,他们将无法始终访问正确的数据(尽管在2016年该问题可能会得到解决) ?)
答案 3 :(得分:1)
试试这个:
调整iframe
内部的一些元素:
$('#ContainingiFrame', window.parent.document).find('#someDiv').css('height', '200px');
或者只调整iframe
:
$('#ContainingiFrame', window.parent.document).height('640');
答案 4 :(得分:0)
试试这个:
$("#ContainingiFrame").contents().find("#someDiv");
答案 5 :(得分:0)
如果您在iframe
中有元素参考,并且需要查找其父iframe
,尤其是当您有多个iframe时,可以通过以下方式找到它。
var $innerElement;//element inside iframe
var $iframeBody = $innerElement.closest('body');
var $parentIframe = $('iframe').filter(function () {
return $(this).contents().find('body')[0] == $iframeBody[0];
});