jQuery与原生JS操作iframe的方法及跨窗口通信详解
本文总结了利用jQuery和原生JavaScript操作iframe的多种方法。涵盖在父窗口与子窗口中相互选中元素、修改属性及获取内容的具体代码示例,并详细解析了通过window.frames、parent及top对象实现多层级框架引用的原理与语法,帮助开发者高效处理复合文档中的页面交互。
jQuery与原生JS操作iframe的方法及跨窗口通信详解
在构建复合文档时,iframe是常见的组件。借助jQuery库来操作iframe,可以显著提升开发效率。本文整理了几种基础且实用的操作方式。
DOM与jQuery基础操作对比
首先介绍原生DOM层面的操作方法:若需在父窗口中操作指定的iframe,可通过 window.frames["iframeSon"].document 获取其文档对象;反之,若在iframe内部需要操作父窗口,则使用 window.parent.document 即可。
接着看jQuery的实现方式:在父窗口中,若要选中iframe内的所有文本输入框,代码为 $(window.frames["iframeSon"].document).find(":text"); 而在iframe内部,若要选中父窗口的所有文本输入框,则使用 $(window.parent.document).find(":text");。
iframe HTML结构示例
示例中iframe框架的HTML结构如下:<iframe src="test.html" id="iframeSon" width="700″ height="300″ frameborder="0″ scrolling="auto"></iframe>
父子窗口单选按钮选中示例
第一种场景:在父窗口中操作,选中iframe内所有的单选按钮。jQuery代码如下:$(window.frames["iframe1"].document).find("input[@type='radio']").attr("checked","true");
第二种场景:在iframe内部操作,选中父窗口中所有的单选按钮。jQuery代码如下:$(window.parent.document).find("input[@type='radio']").attr("checked","true");
对应上述操作的iframe框架HTML结构为:<iframe src="test.html" id="iframe1″ width="700" height="300" frameborder="0″ scrolling="auto"></iframe>
完整jQuery操作代码示例
具体实现代码如下:
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<MCE:SCRIPT mce_src="js/jquery-1.2.6.js" src="../js/jquery-1.2.6.js" type="text/ecmascript"></MCE:SCRIPT>
<MCE:SCRIPT type="text/javascript"><!--
$(function(){
$("#t1").hover(function(){alert('');});
//$("iframe").contents().find("body").append("I'm in an iframe!");
//$(window.frames["iframe1"].document).find("input[@type='text']").attr("size","30px");
//$("#iframe1").contents().find("#d1").css('color','red');
//$(window.frames["iframe1"].document).find("input[@name='t1']").css({background:"#369"});
//$("#iframe1").src("test.html");
});
// --></MCE:SCRIPT>
<DIV>
<INPUT id=t1>
<IFRAME id=iframe1 src="child.htm" mce_src="child.htm"></IFRAME>
<IFRAME height=100 src="child.htm" width=300 mce_src="child.htm"></IFRAME>
</DIV>
<DIV>
</DIV>以上为收集利用Jquery取得iframe中元素的几种方法总结。
获取iframe body内容的方法
以下代码展示了如何获取iframe中body元素的内容:$(document.getElementById('iframeId').contentWindow.document.body).htm() 以及 $(document.getElementById('iframeId').contentWindow.document.body).htm()
上述代码的功能是显示iframe中body元素的内容。
获取iframe内特定ID元素的方法
另一种获取iframe内特定元素的方法:$("#testId", document.frames("iframename").document).html(); 以及 $("#testId", document.frames("iframename").document).html();
该方法的目的是根据iframe的名称(iframename)取得其中ID为"testId"的元素。
等效的jQuery写法为:$(window.frames["iframeName"].document).find("#testId").html() 以及 $(window.frames["iframeName"].document).find("#testId").html()
其作用与前述方法相同。以下是从网络收集的一些示例代码:
iframe获取父窗口元素的技巧
关于如何在iframe中获取父窗口的特定元素值,通常需要结合DOM方法与jQuery方法来实现。
示例1:在父窗口中操作,选中iframe内所有的单选按钮。jQuery代码如下:$(window.frames["iframe1"].document).find("input[@type='radio']").attr("checked","true");
示例2:在iframe内部操作,选中父窗口中所有的单选按钮。jQuery代码如下:$(window.parent.document).find("input[@type='radio']").attr("checked","true");
对应的iframe框架HTML结构为:<iframe src="test.html" id="iframe1" width="700" height="300" frameborder="0" scrolling="auto"></iframe>
上述代码已在IE7环境中测试通过。
多iframe场景下的jQuery操作
接下来介绍使用jQuery操作iframe的其他场景。
场景1:页面中包含两个iframe。
HTML结构如下:<iframe id="leftiframe"...</iframe> 和 <iframe id="mainiframe..</iframe>
在leftiframe中,使用jQuery修改mainiframe的src属性,代码为:$("#mainframe",parent.document.body).attr("src","https://www.jb51.net")
场景2:页面中包含一个ID为mainiframe的iframe,该iframe内部包含一个ID为someID的div元素,结构如下:<iframe id="mainifame"...></ifame> 和 <div id="someID">you want to get this content</div>。目标是获取someID的内容。
获取someID内容的jQuery代码为:$("#mainiframe").contents().find("someID").html() 或者 $("#mainiframe").contains().find("someID").text()。
场景3:在父窗口中操作,选中iframe内所有的单选按钮。jQuery代码如下:$(window.frames["iframe1"].document).find("input[@type='radio']").attr("checked","true");
若要选择特定ID的元素,同样使用find方法,代码为:$(window.frames["iframe1"].document).find("#id")
如前例所示,在leftiframe中,使用jQuery操作mainiframe内someID的内容。代码为:$("#mainframe",parent.document.body).contents().find("someID").html() 或者 $("#mainframe",parent.document.body).contents().find("someID").val()。
原生JavaScript框架引用机制
此外,还可以使用JavaScript直接操纵iframe。
这里重点讲解框架间的互相引用机制。
页面中的所有框架以集合形式作为window对象的属性提供,例如window.frames表示该页面内所有框架的集合。这与表单、链接、图片等对象的集合类似,不同之处在于这些集合是document的属性。因此,引用子框架的语法如下:
window.frames集合与引用语法
window.frames["frameName"];
或者 window.frames.frameName
也可以写作 window.frames[index]
其中,window关键字可以用self代替或省略。假设frameName是页面中的第一个框架,以下写法是等价的:
self.frames["frameName"]
self.frames[0]
frames[0]
frameName
每个框架都对应一个独立的HTML页面,因此它也是一个独立的浏览器窗口,具备窗口的所有特性。所谓引用框架,实际上就是对window对象的引用。通过这个window对象,可以方便地操作其中的页面,例如使用window.document对象写入数据,或使用window.location属性改变框架内的页面。
下面分别介绍不同层次框架间的互相引用方法:
多层级框架引用详解
1.从父框架到子框架的引用
基于上述原理,从父框架引用子框架变得非常简单,即:
window.frames["frameName"];
这样就引用了页面内名为frameName的子框架。如果要引用子框架内的子框架(即二级子框架),根据框架引用即window对象引用的性质,可以实现如下:
window.frames["frameName"].frames["frameName2"];
这样就引用到了二级子框架,以此类推,可以实现多层嵌套框架的引用。
子框架到父框架的引用
2.从子框架到父框架的引用
每个window对象都有一个parent属性,表示它的父框架。如果该框架已经是顶层框架,则window.parent还表示该框架本身。
兄弟框架间的引用
3.兄弟框架间的引用
如果两个框架同为一个父框架的子框架,它们称为兄弟框架,可以通过父框架来实现互相引用。例如一个页面包括2个子框架:
<frameset rows="50%,50%">
<frame src="1.html" name="frame1" />
<frame src="2.html" name="frame2" />
</frameset>
在frame1中可以使用如下语句来引用frame2:
self.parent.frames["frame2"];
不同层次框架间的互相引用
4.不同层次框架间的互相引用
框架的层次是相对于顶层框架而言的。当层次不同时,只要知道自己所在的层次以及另一个框架所在的层次和名字,利用框架引用的window对象性质,可以很容易地实现互相访问。例如:
self.parent.frames["childName"].frames["targetFrameName"];
对顶层框架的引用与判断
5.对顶层框架的引用
与parent属性类似,window对象还有一个top属性。它表示对顶层框架的引用,这可以用来判断一个框架自身是否为顶层框架。例如:
//判断本框架是否为顶层框架
if(self==top){
//dosomething
}
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
为什么JS中typeof []返回object:数组类型检测误区解析
2026-11-04 19:50:47
D3.js 新手入门:环境搭建与第一个条形图实现
2026-11-04 10:49:48
