2010-05-27 57 views
26

访问帧(未IFRAME)内容我有2帧在一个页面这样的(home.html做为如何从jQuery的

<frameset rows="50%, 50%"> 
     <frame id="treeContent" src="treeContent.html" /> 
     <frame id="treeStatus" src="treeStatus.html" /> 
</frameset> 

,然后在一个帧中(treeStatus.html)予有类似的东西

<body style="margin: 0px"> 
<div id="statusText">Status bar for Tree</div> 
</body> 

我想从顶部窗口操纵位于通过jquery的子框架(例如显示和隐藏)的div。

我见过severalquestionslikethis他们建议以下

$(document).ready(function(){ 

      $('#treeStatus').contents().find("#statusText").hide(); 
    }); 

我不知道这是否借助iframe但对我来说,我有简单的帧它似乎并没有工作。将代码放在里面home.html的

这里是Firebug的控制台

>>> $('#treeStatus') 
[frame#treeStatus] 
>>> $('#treeStatus').contents() 
[] 
>>> $('#treeStatus').children() 
[] 

那么,如何访问框架元素从顶部框架一些输出?我在这里错过了什么吗?

回答

两个答案在这里结合后,正确的方法是

$('#statusText',top.frames["treeStatus"].document).hide(); 

对于这项工作的框架必须有从ID属性分开,就像这样:

<frameset rows="50%, 50%"> 
      <frame id="treeContent" src="treeContent.html" /> 
      <frame name="treeStatus" id="treeStatus" src="treeStatus.html" /> 
    </frameset> 
+0

刚一说明:为什么在使用'position:fixed'来使用框架时,总是在视口的底部添加一个状态栏(或者由尺寸建议的日志)......支持一个古老的浏览器? – alex 2010-05-27 14:26:02

+0

@alex这只是我为stackoverflow创建的最小示例。真正的应用程序是完全不同的。它比简单的状态栏更复杂。框架是一个要求(不要问!)。 – kazanaki 2010-05-27 14:34:29

+0

好的,不用担心。只是想我会补充一点(有些人不知道“position:fixed”)。 – alex 2010-05-27 23:06:48

回答

11

你可以抓住你想要操纵的框架和div,并将它传递给变量。

var statusText = top.frames["treeStatus"].document.getElementById('statusText'); 

然后你可以通过jQuery做任何你想做的事情。

$(statusText).whatever(); 

虽然有时你无法回避不必使用帧,请记住,在<frame>标签在HTML5废弃。如果您计划升级到HTML5,则必须使用iFrame。

+0

不完全是我想要的,因为我相信jQuery的全部目的是避免getElementById。然而,你的答案帮助我做我想做的事,所以我接受它。 – kazanaki 2010-05-28 06:33:36

+0

伟大的职位男人,像一个魅力工作 – 2013-01-17 22:18:38

5

你需要提供一个参考框架你什么访问:

$("some selector", top.frames["treeStatus"])) 
+2

我试过了,它本身不起作用。看到便携式的答案后,我使它与$(“某些选择器”,top.frames [“treeStatus”]。文档)),并添加“treeStatus”作为名称除了id – kazanaki 2010-05-28 06:32:06

4

我有嵌套的帧。在我的情况下,使它工作我用命令:

var statusText = 
top.document.getElementById("treeStatus").contentDocument.getElementById("statusText"); 

随后,查尔斯已经回答了,你可以通过jQuery的做自己想做的任何事情:

$(statusText).whatever(); 
+0

contentDocument是我一直在寻找!我也有嵌套的框架,感谢这篇文章! – NetWave 2013-04-18 07:10:52

2

对于纯jQuery的解决方案(不需要top.frames等),以下似乎工作:

$('some selector for item from frame' ,$('frame selector')[0].contentDocument) 

这具有适用于嵌套的框架的优点是:

$('inner frame item selector', $('inner frame selector', $('outer frame selector')[0].contentDocument)[0].contentDocument)