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