使用jQuery在父窗口选择元素。

53
有没有一种使用jQuery在父窗口中选择DIV的方法?
例如:
主页面包含以下内容,
<div id="testdiv"></div>

弹出页面有一个包含一些选项和一个“应用”按钮的表单。当用户点击应用按钮时,它会影响主页面上的样式属性。

大致逻辑如下:

parent.$("#testdiv").attr("style", content from form);

可能是重复的问题:如何使用jQuery访问父窗口对象? - Dude Pascalou
5个回答

121

使用上下文参数

$("#testdiv",parent.document)

但是如果你真的使用了弹出窗口,你需要访问 opener 而不是 parent

$("#testdiv",opener.document)

今天学到了新东西,谢谢 :) - Manu

23
我找到了解决这个问题的方法,并发现了当前页面。我实施了上述解决方案:
$("#testdiv",opener.document) //doesn't work

但它不起作用。也许在以前的jQuery版本中它能够工作,但现在似乎不行了。

我在另一个stackoverflow页面上找到了这个可行的解决方案:如何使用jquery访问父窗口对象?

我从那里得到了这个可行的解决方案:

window.opener.$("#testdiv") //This works.

1
太棒了伙计!@Dr.Molle 太自信了! - Anil Sharma
这个问题的解决方案是否需要已经加载了jQuery的弹出窗口才能正常工作?或者它实际上在2011年就可以工作了。 - Dinerdo

4

我遇到了同样的问题,但是如上所述,被接受的解决方案对我无效。

如果您在 frame 或 iframe 元素内部,另一种解决方案是使用

window.parent.$('#testdiv');

这里简要解释了window.opener、window.parent和window.top之间的区别:

  • window.opener指的是调用window.open( ...)打开当前窗口的那个窗口
  • window.parent指的是包含当前窗口的框架或iframe元素的父窗口

2
您还可以使用以下代码将表单中的内容插入到指定元素的样式中:parent.jQuery("#testdiv").attr("style", 表单中的内容);

如果 iframe 在另一个域中怎么办?如何关闭它? - Akki619

1
为什么不两者都确定呢?
if(opener.document){
  $("#testdiv",opener.document).doStuff();
}else{
  $("#testdiv",window.opener).doStuff();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接