jquery操作 iframe的方法


Posted in Javascript onDecember 03, 2014

我们先看一下 JQUERY中的对像 contents() 的帮助文件

contents()
概述
查找匹配元素内部所有的子节点(包括文本节点)。如果元素是一个iframe,则查找文档内容

示例
描述:
查找所有文本节点并加粗

HTML

<p>Hello <a href="http://ejohn.org/">John</a>, how are 

you doing?</p>

jQuery

$("p").contents().not("[nodeType=1]").wrap("<b/>");结果:

<p><b>Hello</b> 

<a href="http://ejohn.org/">John</a>, <b>how are you 

doing?</b></p>

描述:
往一个空框架中加些内容

HTML

<iframe 

src="/index-blank.html" width="300" height="100"></iframe>

jQuery

$("iframe").contents().find("body")

.append("I'm in an iframe!");

 

去掉iframe 的边界 frameborder="0"

1 内容里有两个ifame

<iframe id="leftiframe"...</iframe> 

<iframe id="mainiframe..</iframe>

leftiframe中jQuery改变mainiframe的src代码:

$("#mainframe",parent.document.body).attr("src","http://www.baidu.com")

2 如果内容里面有一个ID为mainiframe的ifame

<iframe id="mainifame"...></ifame>

ifame包含一个someID

<div id="someID">you want to get this content</div>

得到someID的内容

$("#mainiframe").contents().find("someID").html()html 或者 

$("#mainiframe").contains().find("someID").text()值

2 如上面所示
leftiframe中的jQuery操作mainiframe的内容someID的内容

$("#mainframe",parent.document.body).contents().find("someID").html()或者
$("#mainframe",parent.document.body).contents().find("someID").val()

Jquery获取到 iframe 所属的父窗口的里面的id为xuan的 标签的

$(window.parent.document).find("#xuan").html(x);//

//js创建 元素 并追加到 父元素的 Iframe中的 元素中的dom操作问题:

iframe中直接调用父窗口中的方法:假设父窗口有个add的方法

self.parent.add();

===============================================================

IE和Firefox对iframe document对象的差异性

在IE6、IE7中,我们可以使用document.frames[ID].document来访问iframe子窗口中的document对象,可是这是不符合W3C标准的写法,也是IE下独有的方法,在Firefox下却不可以使用,Firefox下使用的是符合W3C标准的document.getElementById(ID).contentDocument方法,今天我在写实例的时候,通过IE8进行测试,IE8也是使用的符合W3C标准的
document.getElementById(ID).contentDocument 方法。所以我们可以写一个在IE和Firefox下通用的获取iframe
document对象的函数—getIFrameDOM:

functiongetIFrameDOM(id){returndocument.getElementById(id).contentDocument||document.frames[id].document;}

P.S.:如果我们要获取iframe的window对象,而不是document对象,可以使用document.getElementById(ID).contentWindow的方法。这样我们就可以使用子窗口中的window对象了,比如子窗口中的函数。

在子窗口使用父窗口的函数,获取父窗口document对象

在子窗口中,我们可以通过parent就可以获得父窗口的window对象,如果假如我们在父窗口有一个函数为getIFrameDOM,我们可以通过parent.getIFrameDOM来调用,同理我们使用parent.document就可以在子窗口中访问父窗口的document对象了。

使用JavaScript进行iframe的DOM操作实例

首先,我们在父窗口中引入两个iframe子窗口,ID分别为wIframeA、wIframeB,地址分别为:a.html、b.html。
父窗口主要HTML代码如下:

<div id="pHello" style="margin:10px 

auto;width:360px;height:30px;">此处可通过iframeB的JavaScript函数,来替换哦~</div> 

<iframe id="wIframeA" name="myiframeA" src="a.html" scrolling="no" 

frameborder="0"></iframe> <iframe id="wIframeB" name="myiframeB" 

src="b.html" scrolling="no" frameborder="0"></iframe>

 
在子窗口A、B中我放了一个ID为hello的P,以方便我们进行DOM操作演示,子窗口A、B的主要HTML代码如下:
<p id="hello">Hello World!</p>

1、在iframe中,父窗口操作子窗口的DOM

建好了父窗口跟子窗口,这样我们可以在父窗口中,通过以下iframeA()函数来把子窗口A更换P的背景颜色为红色:

functioniframeA(){//给子窗口A改变ID为hello的背景色

vara=getIFrameDOM("wIframeA");

a.getElementById('hello').style.background="red";

}

functiongetIFrameDOM(id){//兼容IE、Firefox的iframeDOM获取函数

returndocument.getElementById(id).contentDocument||document.frames[id].document;

}

2、在iframe中,子窗口操作父窗口的DOM

在子窗口中,我们可以方便的进行父窗口DOM操作,只需要在DOM操作之前添加亦歌parent对象的方法就可以啦,如:在上面的子窗口B中,我们可以使用下面的代码把,父窗口中ID为“pHello”的内容给替换掉:

-------------------

3、在iframe中,子窗口A操作子窗口B的DOM

既然子窗口可以操作父窗口的window对象和document对象,那么子窗口也可以操作另外的子窗口的DOM啦~断桥残雪在子窗口B中可以直接使用parent直接调用父窗口中的getIFrameDOM函数获得子窗口A的document对象,这样要修改子窗口A的内容就很简单啦,如以下的代码:

vara=parent.getIFrameDOM("wIframeA");

===================================================================================

一个iframe高度自动变化的问题搞了我半天,网上找了下资料,不是很好,结合了一下jquery(版本1.3.2),4行代码即可,完美兼容IE、Firefox、Opera、Safari、Google
Chrome,js如下:

function  heightSet(thisFrame){

if($.browser.mozilla || $.browser.msie){

          bodyHeight =window.frames["thisFrameName"].document.body.scrollHeight;

}else{

          bodyHeight =thisFrame.contentWindow.document.documentElement.scrollHeight;

//这行可代替上一行,这样heightSet函数的参数可以省略了

          //bodyHeight = document.getElementById("thisFrameId").contentWindow.document.documentElement.scrollHeight;

}

       document.getElementById("thisFrameId").height=bodyHeight;  

}

<iframe id="mainFrame" name="mainFrame" frameborder="0"  scrolling="no" src=""onload="heightSet(this)"></iframe>

引用

this关键字在各种浏览器似乎有不同的意思,FF和IE必须要通过iframe的名字去得到内部页面高度,而其他浏览器则可以用this或ID

引用

都在说一个异步的问题,如果你ajax用得特别多,但又不想每次都去设置,那动态改变iframe肯定达不到你的代码清洁要求,没办法,要么你就脱离iframe。我只能说说一般处理方式,毕竟ajax或动态表单在一般应用中只占小数比例,异步请求后只需在后面加上:

Js代码

parent.window.heightSet();
Javascript 相关文章推荐
juqery 学习之六 CSS--css、位置、宽高
Feb 11 Javascript
JS两种定义方式的区别、内部原理
Nov 21 Javascript
js实现连个数字相加而不是拼接的方法
Feb 23 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
Oct 17 Javascript
jQuery Ajax调用WCF服务详细教程
Mar 31 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
vue中axios解决跨域问题和拦截器的使用方法
Mar 07 Javascript
JS Array.from()将伪数组转换成数组的方法示例
Mar 23 Javascript
vue实现评价星星功能
Jun 30 Javascript
js实现随机点名
Jan 19 Javascript
使用js实现数据格式化
Dec 03 #Javascript
使用js获取图片原始尺寸
Dec 03 #Javascript
上传文件返回的json数据会被提示下载问题解决方案
Dec 03 #Javascript
使用jQuery实现验证上传图片的格式与大小
Dec 03 #Javascript
使用正则表达式的格式化与高亮显示json字符串
Dec 03 #Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 #Javascript
JS逆序遍历实现代码
Dec 02 #Javascript
You might like
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
javascript 常用方法总结
2009/06/03 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python深入学习之装饰器
2014/08/31 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
给校长的建议书
2014/03/12 职场文书
班组建设经验交流材料
2014/05/12 职场文书
伊琍体标语
2014/06/25 职场文书
校庆团日活动总结
2014/08/28 职场文书
商铺门面租房协议书
2014/10/21 职场文书
学籍证明模板
2014/11/21 职场文书
教师岗位职责
2015/02/03 职场文书
超市收银员岗位职责
2015/04/07 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL