我正在使用的客户端有一个像这样的框架集......
<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>
当某个动作发生时,我需要我的框架(当前隐藏的重要框架)主要接管页面并阻止与其他框架的任何交互。我正计划使用jquery块UI插件阻止交互。
问题是我实际上无法更改foo.html或blah.html文件。所以JS代码不能存在。 我需要做的是在这些框架的上下文中执行我的jquery代码。所以回顾一下,我需要将我的JQuery代码放在myFrame.html中,但是在其他框架的上下文中执行。我怎样才能做到这一点?希望这是有道理的。
由于 CDR
答案 0 :(得分:81)
jQuery
函数,你通常用$
调用,它接受一个叫做context的第二个参数,它是“我应该在哪个jQuery对象的DOM元素中进行搜索”。大多数情况下,您省略了此参数,因此上下文默认为当前HTML文档。当您的代码在iframe中执行时,文档默认为iframe的文档。但是您可以轻松地抓取其他框架之一的文档。
例如,将其放在myFrame.html
中,这将删除框架中包含blah.html
的所有h1元素。注意$
的第二个参数,它是从重要框架中抓取blah框架的表达式:
<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>
答案 1 :(得分:4)
如pjb3所说,设置jQuery上下文。如果您有嵌套框架,您的代码将如下所示:
$('*',window.parent.frames[0].frames[0].document).size();
或者,更好的是,制作一条捷径:
targetFrame = window.parent.frames[0].frames[0].document;
$('*',targetFrame).size();
答案 2 :(得分:0)
我不确定块插件,但是你不能抓住相关的框架并使用“框架树”来操纵它,如下所示:(来自importantFrame.htm内)
parent.theFrame.someProperty = someValue;
例如:
parent.theFrame.location.href='anotherPage.html';
从我一直在阅读的内容中,您可能需要在目标页面上使用Jquery,但您可以尝试以下内容:
parent.theFrame.block();
或者也许:
$('#theFrame').block();
答案 3 :(得分:0)
在jQuery&gt; = 1.7版本中,我们无法以旧方式获取事件
旧版本(&lt; 1.7):
var events = $('#form').data('events');
1.7及更新版本:
var events = $.fn.data($('#form'), 'events');