在另一个框架的上下文中运行JQuery
我正在使用的客户端有一个像这样的框架…
<frameset rows="100,*, 0"> <frame name="theFrame" id="theFrame" src="blah.html" > <frame name="theSecondFrame" id="theSecondFrame" src="foo.html" > <frame name="importantFrame" id="importantFrame" src="myFrame.html" > </frameset>
当某个动作发生时,我需要我的框架(当前隐藏的重要框架)主要接pipe页面并阻止与其他框架的交互。 我正在计划使用jQuery块UI插件阻止交互。
问题是我实际上不能改变foo.html或blah.html文件。 所以JS代码不能住在那里。 我需要做的是在这些框架的上下文中执行我的jQuery代码 。 所以我只想回顾一下,我需要我的JQuery代码生存在myFrame.html中,但是在其他框架的上下文中执行。 我怎样才能做到这一点? 希望是有道理的。
感谢CDR
jQuery
函数更常用$
调用,第二个参数叫做context,它是“我应该在哪个jQuery对象的哪个DOM元素中进行search”。 大多数时候你忽略了这个参数,所以上下文默认为当前的HTML文档。 当您的代码在iframe中执行时,文档默认为iframe的文档。 但是,您可以轻松地抓取其他框架之一的文档。
例如,把它放在myFrame.html
,这将从myFrame.html
删除框架中的所有h1元素。 注意到$
的第二个参数,这是从重要的框架中抓取等值线的expression式:
<html> <head> <script type="text/javascript" src="/javascripts/jquery.js"></script> <script type="text/javascript"> function doIt() { $('h1', window.parent.frames[0].document).remove() } </script> </head> <body> <h1>My Frame</h1> <a href="#" onclick="doIt()">Do It</a> </body> </html>
像pjb3说的那样,设置jQuery的上下文。 如果你有嵌套的框架,你的代码将如下所示:
$('*',window.parent.frames[0].frames[0].document).size();
或者,更好的做一个捷径:
targetFrame = window.parent.frames[0].frames[0].document; $('*',targetFrame).size();
我不确定这个块的插件,但你不能掌握相关的框架,并使用“框架树”来处理它,如下所示:(来自importantFrame.htm)
parent.theFrame.someProperty = someValue;
例如:
parent.theFrame.location.href='anotherPage.html';
从我一直在阅读的内容来看,您可能需要在目标页面上使用Jquery,但是您可以尝试如下所示:
parent.theFrame.block();
或者可能:
$('#theFrame').block();
在jQuery> = 1.7的版本中,我们不能以旧的方式获取事件
旧版本(<1.7):
var events = $('#form').data('events');
1.7和更新:
var events = $.fn.data($('#form'), 'events');