在另一个框架的上下文中运行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');