一、获取父窗口元素:

  $("#父窗口元素ID",window.parent.document);对应javascript版本为window.parent.document.getElementById("父窗口元素ID");

  取父窗口的元素方法:$(selector, window.parent.document);

  那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);

  类似的,取其它窗口的方法大同小异

  $(selector, window.top.document);

  $(selector, window.opener.document);

  $(selector, window.top.frames[0].document);

二、Javascript弹出子窗口

  可以通过多种方式实现,下面介绍几种方法

(1) 通过window对象的open()方法,open()方法将会产生一个新的window窗口对象

  其用法为:window.open(URL,windowName,parameters);

  URL: 描述要打开的窗口的URL地址,如何为空则不打开任何网页;

  windowName:描述被打开的窗口的名称,可以使用'_top'、'_blank'等内建名称,这里的名称跟<a href="..." target="...">里的target属性是一样的。

  parameters:描述被打开的窗口的参数值,或者说是样貌,其包括窗口的各个属性值,及要传入的参数值。

  例如:

//打开一个400 x 100 的干净的窗口:
open('','_blank','width=400,height=100,menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes') //也可以这样写:
var newWindow = open('','_blank');

  参数说明如下:

top=# 窗口顶部离开屏幕顶部的像素数

left=# 窗口左端离开屏幕左端的像素数

width=# 窗口的宽度

height=# 窗口的高度

menubar=... 窗口有没有菜单,取值yes或no

toolbar=... 窗口有没有工具条,取值yes或no

location=... 窗口有没有地址栏,取值yes或no

directories=... 窗口有没有连接区,取值yes或no

scrollbars=... 窗口有没有滚动条,取值yes或no

status=... 窗口有没有状态栏,取值yes或no

resizable=... 窗口给不给调整大小,取值yes或no

  (2) 在javascript中除了通过open()方法建立window对象实现弹出窗口外,还可以通过建立对话框的方式弹出窗口。如:

alert(""); //弹出信息提示对话框

confirm(""); //弹出信息确认对话框

prompt(""); //具有交互性质的对话框

  但是,上述实现的弹出窗口具有的功能较为单一,只能完成较为简单的功能。对于需要在对话框中显示多个数据信息,甚至是HTML控件就无能为力了。

  (3) 使用模态对话框实现复杂的对话框需求

  在javascript的内建方法中还有一类方法可以实现通过对话框显示HTML内容,也就是说可以通过创建对话框的方式来完成创建窗口对象所能完成的功能。

  包括创建模态对话框和非模态对话框两种。

  实现方法为:

//创建模态你对话框

window.showModalDialog(sURL,vArguments,sFeatures)

//创建非模态对话框

window.showModelessDialog(sURL,vArguments,sFeatures)

  其区别在于:用showModelessDialog()打开窗口时,不必用window.close()去关闭它,当以非模态方式[IE5]打开时,打开对话框的窗口仍可以进行其他的操作,即对话框不总是最上面的焦点,当打开它的窗口URL改变时,它自动关闭。而模态[IE4]方式的对话框始终有焦点(焦点不可移走,直到它关闭)。模态对话框和打开它的窗口相联系,因此我们打开另外的窗口时,他们的链接关系依然保存,并且隐藏在活动窗口的下面。showModeDialog()则不然。

  参数说明:

sURL:必选参数,类型:字符串。用来指定对话框要显示的文档的URL

vArguments:可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数

sFeatures:选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开

dialogHeight:对话框高度,不小于100px,IE4中dialogHeight和dialogWidth 默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位

dialogWidth: 对话框宽度

dialogLeft: 距离桌面左的距离

dialogTop: 离桌面上的距离

center: 窗口是否居中,默认yes,但仍可以指定高度和宽度,取值范围{yes | no | 1 | 0 }

help: 是否显示帮助按钮,默认yes,取值范围{yes | no | 1 | 0 }

resizable: 是否可被改变大小,默认no,取值范围{yes | no | 1 | 0 } [IE5+]

status: 是否显示状态栏,默认为yes[ Modeless]或no[Modal],取值范围{yes | no | 1 | 0 } [IE5+]

scroll:指明对话框是否显示滚动条,默认为yes,取值范围{ yes | no | 1 | 0 | on | off }

还有几个属性是用在HTA中的,在一般的网页中一般不使用。

dialogHide:在打印或者打印预览时对话框是否隐藏,默认为no,取值范围{ yes | no | 1 | 0 | on | off }。

edge:指明对话框的边框样式,默认为raised,取值范围{ sunken | raised }。

unadorned:默认为no,取值范围{ yes | no | 1 | 0 | on | off }。

  传入参数:要向对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象

var newWin=window.showModalDialog(url,window,'dialogHeight:500px, dialogLeft:100px, dialogTop:100px,dialogWidth:300px, status:0, edge:sunken');
newWin.open();

  与使用window.open()方法创建窗口相比,模态方法创建窗口的区别在于有模态方法创建的窗口后将不能操作父窗口。

三、子窗口与父窗口间通信:

  (1) 使用window.open()创建的窗口与父窗口通信

  可以在子窗口页面中通过window.opener来获取父窗口对象,获取之后子窗口便可以对父窗口执行刷新,传值等操作。

window.opener.location.reload(); //子窗口刷新父窗口
window.opener.location.href //获取父窗口href
window.opener.locaiton.pathname //获取父窗口路径名 //刷新父页面
window.location.href=window.location.href ; //重新定位父页面
window.location.reload;

  (2) 模态窗口与父窗口通信

  通过使用showModelDialog() 及showModelessDialog() 方法创建的子窗口想与父窗口通信时,不能通过window.opener来获取父窗口对象。

  要实现通信,必须在创建模态子窗口时向子窗口传入父窗口对象

  (一)实现方式为:

  1、在父窗口中:

var newWin=window.showModelDialog(url,window,'');

newWin.open();

此时参数window即是父窗口对象

  2、在子窗口中:

  需首先获取父窗口对象,然后才能使用父窗口对象。由于父窗口对象是在创建子窗口时通过传入参数的方式传入的,因此,在子窗口中也只能通过获取窗口参数的方式获取父窗口对象。获取方式如下:

  var parent=widnow.dialogArguments

  变量parent便是父窗口对象

//通过子窗口提交父窗口中的表单:form1,提交后执行查询操作
var parent=window.dialogArguments;
parent.document.form1.action="QueryInfor.jsp";
parent.submit();
//刷新父页面
var parent=window.dialogArguments;
parent.location.reload();

  从子窗口传值到父窗口:要实现在模态子窗口中传值到父窗口,需要使用window.returnValue完成

  (二)实现方法如下:

  1、在子窗口中:

//获取父窗口某字段值,对该值加一后返回父窗口
var parent=window.dialogArguments;//获取父窗口对象
var x=parent.docuement.getElementById("age").value;
x=x+; //传回x值
window.returnValue=x;

  2、在父窗口中:

//获取来自子窗口的值
var newWin=window.showModelDialog(url,window,'');
if(newWin!=null){
document.getElementById("age").value=newWin;
}

  (三)在子窗口中设置父窗口的值

  在子窗口中向父窗口中传入值似乎没有直接设置父窗口中的值来得明了。直接设置父窗口中元素的值显得要更灵活一些,不过具体使用哪种方法要根据实际情况和已有的实现方式而定,因为如果使用了不切实际的方法不仅降低开发效率,也降低了执行效率,往往也会造成不优雅的实现方式和代码风格。

  子窗口设置父窗口的值使用方法如下:

  1、子窗口中:

var parent=window.dialogArguments;
var x=parent.document.getElementById("age").value;
x=x+;

  2、设置父窗口中age属性值

parent.document.getElementById("age").value=x;

  

  以上是我在项目中使用javascript解决子窗口问题时,收集及积累的一些方法和资料。其实不论是使用window.open()还是使用window.showModelDialog()进行传参等操作时,虽然在实现方法上有很大的差别,初次接触会觉得有点乱,但只要理清子窗口与父窗口之间的关系和角色之后,就很好理解了。

jquery 获取父窗口的元素、父窗口、子窗口的更多相关文章

  1. jquery 获取父窗口的元素 父窗口 子窗口

    一.获取页面元素 取父窗口的元素方法:$(selector, window.parent.document); 那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent ...

  2. jQuery 获取父窗口的元素 父窗口 子窗口(iframe)

    $("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementById ...

  3. Js/Jquery获取iframe中的元素

    转载: Js/Jquery获取iframe中的元素 - - ITeye技术网站http://java-my-life.iteye.com/blog/1275205 在web开发中,经常会用到ifram ...

  4. JavaScript、jQuery获取页面及个元素高度、宽度

    Javascript获取获取屏幕.浏览器窗口 ,浏览器,网页高度.宽度的大小网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.client ...

  5. JQuery获取与设置HTML元素的值value

    JQuery获取与设置HTML元素的值value 作者:简明现代魔法图书馆 发布时间:2011-07-07 10:16:13 20481 次阅读 服务器君一共花费了13.221 ms进行了6次数据库查 ...

  6. JQuery获取第几个元素和判断元素在第几个

    HTML代码: <ul> <li>jQuery判断当前元素是第几个元素示例</li> <li>jQuery获取第N个元素示例</li> &l ...

  7. jQuery获取动态添加的元素,live和on的区别

    今天给大家说一下如果用jQuery获取动态添加的元素,通常如果你在网页上利用jQuery添加一个元素,那么用平常的jQuery获取元素的方法无效的获取不到的.可以用以下的方法获取动态元素!假设我们现在 ...

  8. window.open 打开子窗口,关闭所有的子窗口

    需求:通过window.open方法打开了子窗口,当关闭主窗口时,子窗口应当也关闭. 实现思路: 1.打开子窗口函数window.open(url,winName)的第二个参数winName可以唯一标 ...

  9. Js/Jquery获取iframe中的元素 在Iframe中获取父窗体的元素方法

    在web开发中,经常会用到iframe,难免会碰到需要在父窗口中使用iframe中的元素.或者在iframe框架中使用父窗口的元素 js 在父窗口中获取iframe中的元素  1. 格式:window ...

  10. JS和jQuery获取节点的兄弟,父级,子级元素

    原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的 ...

随机推荐

  1. 三:Storm设计一个Topology用来统计单词的TopN的实例

    Storm的单词统计设计 一:Storm的wordCount和Hadoop的wordCount实例对比

  2. hdu 1533(最小费用最大流)

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  3. hdu 2444(染色法判断二分图+最大匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  4. windows网卡命令

    netsh interface ip set address name="本地连接" source=dhcpnetsh interface ip set dns name=&quo ...

  5. head first (三):装饰者模式

    看到别人写的,都看不进去,算了还是自己手写一遍吧,算是帮助自己理解了.写的比较简单,例子也比较好懂,什么时候使用自己看着办. 1.定义 装饰者模式:动态地将职责附加到对象上.若要扩展功能,装饰者提供比 ...

  6. js实现table导出为Excel文件

    1.首先创建好表格. 2.然后在js中写三个方法 1)判断浏览器 2)定义文档类型 template : 定义文档的类型,相当于html页面中顶部的<!DOCTYPE> 声明.(个人理解, ...

  7. About 分块

    分块的的复杂度是带根号的.... 然后,它是一种暴力算法 简单来说就是优化过的暴力 分块算法会对一个序列(长度为N)进行划分,每一块最多有K个元素,这样就会分为N/K块: 一般K取sqrt(N),那么 ...

  8. [Luogu1979][NOIP2013]华容道(BFS+SPFA)

    考虑从起点到终点的过程,一定是先将空格子移到指定格子旁边,和指定格子交换,再移到下一个指定格子要到的地方,再交换,如此反复. 于是问题分为两个部分: 1.给定两个曼哈顿距离为2的格子求最短路,BFS即 ...

  9. Educational Codeforces Round 41 (Rated for Div. 2) ABCDEF

    最近打的比较少...就只有这么点题解了. A. Tetris time limit per test 1 second memory limit per test 256 megabytes inpu ...

  10. Problem D: 结构体:计算输入日期是该年的第几天

    #include <stdio.h> struct time{ int year; int month; int day;}; int main(void) { struct time s ...