0

当它仅包含在父窗口中时,是否可以从 iframe 访问 jQuery 库?我有一个加载(有时数百个)iframe 的父窗口。在每个 iframe 中,我想执行一些 jQuery 函数。如果我在每个 iframe 中定义库,我只能使用:

<script src="/jquery.min.js" type="text/javascript"></script>

但是,为了更快地加载,我希望我只在父窗口中包含上述脚本标记,然后从每个子/iframe 访问父库以执行影响 iframe 的函数。

感谢您的回复。这是我在子框架中的内容:

&lt;script>
var $ = parent.jQuery;

$(this, document).ready(function(){
    var step = 0.2;
    $('body', document).css('MozTransform','scale(0.2)');
});

&lt;/script>

而我所期望的是,一旦孩子的文档“准备好”,它会自行缩小到 20%。除了它不工作。是否有可能,或者我应该尝试将孩子的代码添加到父文档中并为每个帧分配 id,然后遍历它们。

使用 $( document ).ready(function(){ $('body').css('MozTransform','scale('

导致父窗口缩小。我想缩小 iframe。

4

2 回答 2

1

假设iframes 与父文档在同一个域中,您可以轻松获得对父窗口的 jQuery 的引用:

var $ = parent.jQuery;

或者,如果您iframe的嵌套深度超过一层:

var $ = top.jQuery;

但是,默认情况下,jQuery 只会查询包含它的文档。如果您需要查询给定iframe的 DOM,您有两种选择:

Pass document,在这种情况下指向给定iframewindow.document,作为上下文

$('#elementInsideIframe', document).doSomething();

或者,存储一个包含iframe's 文档.find()及其后代的 jQuery 对象。

var $dom = $(document);
$dom.find('#elementInsideIframe').doSomething();

现场演示


尽管其他人怎么说,缓存对于您的用例来说还不够“好”。jQuery 有相当多的 init 开销,它是你不想包含数百次的东西。


根据 OP 更新:

只需$(document).ready()在框架内使用。在 (i) 帧上下文中,document指向给定帧的window.document.

此外,如果您使用 jQuery >= 1.8,则不需要使用供应商前缀 - jQuery 将使用适当的供应商前缀属性以防不支持标准属性。

演示:级,iframe

于 2013-10-27T17:39:56.073 回答
0

使用父窗口或顶部窗口的 html 代码的开销将超过额外的脚本行来加载 jquery。

在每个框架中单独加载它,可能使用 jquery 的在线版本,这将增加客户端在进入您的站点之前加载库的机会。

在示例中

<script src="http://code.jquery.com/jquery-latest.min.js"
        type="text/javascript"></script>
于 2013-10-27T17:01:41.963 回答