共计 3165 个字符,预计需要花费 8 分钟才能阅读完成。
这里要讨论的问题涉及到这几个方面:
1. 父框架获取子框架的元素值
2. 子框架获取父框架的元素值
3. 子框架之间的元素值获取
4. 父框架调用子框架的方法
5. 子框架调用父框架的方法
6. 子框架之间的方法调用
以下是根据收集与查阅整理的一些资料,仅作参考,不足之处敬请指正。
首先以三个简单的页面作为例子进行说明
主页面代码:
<html> | |
<head> | |
<title>主页面</title> | |
<script type='text/javascript' src='http://code.jquery.com/jquery.min.js?ver=1'></script> | |
<script type="text/javascript"> | |
function showSubValue(){ | |
//var v = window.frames[0].document.getElementById("subdiv1").innerHTML; | |
//alert(v); | |
//var url="http://lzw.me" | |
var o = $(window.frames[0].document).find(":div#subdiv1"); | |
alert(o.html()); | |
} | |
for(var i=0;i<window.frames.length;i++){ | |
window.frames.showSubValue(); | |
} | |
</script> | |
</head> | |
<body> | |
<div id="mainDiv">主页面测试数据</div> | |
<input type="button" value="查看子页面数据" onclick="showSubValue();"/> | |
<iframe id="iframeA" src="iframeA.html" width="300" height="300"></iframe> | |
</body> | |
</html> |
iframeA页面及代码:
<html> | |
<head> | |
<script type='text/javascript' src='http://code.jquery.com/jquery.min.js?ver=1'></script> | |
<title>子页面A</title> | |
<script type="text/javascript"> | |
function showMainValue(){ | |
//dom方式 | |
//var v = window.parent.document.getElementById("mainDiv").innerHTML; | |
//alert(v); | |
//window.parent.document.getElementById("mainDiv").innerHTML = "修改后的主页面数据"; | |
//jquery方式 | |
var o = $(window.parent.document).find(":div#mainDiv"); | |
alert(o.html()); | |
} | |
</script> | |
</head> | |
<body> | |
<div id="subdiv1">子页面测试数据</div> | |
<input type="text" id="txtUserName" name="txtUserNameA" value="iframeA"> | |
<input type="button" value="显示父页面数据" onclick="showMainValue();"/> | |
</body> | |
</html> |
iframeB页面及代码:
与iframeA雷同,略
1. 父框架操作子框架的元素值
DOM方法
window.frames["iframeSon"].document
举例:
var v = window.frames[0].document.getElementById("subdiv1").innerHTML; | |
alert(v); |
jquery方法
在父窗口中操作 选中IFRAME中的所有输入框:
$(window.frames["iframeSon"].document).find(":text");
举例:
var o = $(window.frames[0].document).find(":div#subdiv1"); | |
alert(o.html()); |
举例二:在父窗口中操作 选中IFRAME中的所有单选钮:
$(window.frames["iframeA"].document).find("input[@type='radio']").attr("checked","true");
2. 子框架操作父框架的元素值
DOM方法:
window.parent.document
举例:
var v = window.parent.document.getElementById("mainDiv").innerHTML; | |
alert(v); | |
window.parent.document.getElementById("mainDiv").innerHTML = "修改后的主页面数据"; |
jquery方法
在IFRAME中操作 选中父窗口中的所有输入框:
$(window.parent.document).find(":text");
举例:
var o = $(window.parent.document).find(":div#mainDiv"); | |
alert(o.html()); |
3. 子框架之间的元素值操作
这个需要借助主页面间接获取另一个子页面。子页面A通过主页面间接获取子页面B,然后即与正常操作dom相同
DOM方式举例
//通过父页面,间接获取另外一个子页面 | |
if (self != top) { | |
var oDoc = top.parent.document; | |
var oAnotherFrame = oDoc.frames["iframeB"]; //返回另外一个iframe | |
alert(oAnotherFrame.location); | |
alert(oAnotherFrame.document.body.innerHTML); | |
alert(oAnotherFrame.document.documentElement.innerHTML); | |
var oTxt = oAnotherFrame.document.getElementById("txtUserName"); | |
alert(oTxt.value); | |
} |
jqery方式举例
iframeB中jQuery改变iframeA的src代码:
$("#iframeA",parent.document.body).attr("src",http://lzw.me);
4. 父框架调用子框架的方法
基本格式为:window.frames[sonframe].子框架函数方法
例如一个页面里有多个iframe,每个iframe里都有一个doQuery方法。
主页面调用每个iframe的showSubValue方法举例:
for(var i=0;i<window.frames.length;i++){ | |
window.frames.showSubValue(); | |
} |
5. 子框架调用父框架的方法
子页面触发主页面的函数方法,只需要如下操作即可
parent.window.函数方法
举例参考:
if(getcookie("lzw.me.user")=="") parent.window.login_form();
6. 子框架之间的方法调用
参考3和4,举例如下:
var oDoc = top.parent.document; //获取父窗体DOM对象 | |
var oAnotherFrame = oDoc.frames["iframeB"]; //返回另外一个iframe | |
oAnotherFrame.showSubValue(); //执行子窗体iframeB的方法 |