如何从jQuery访问框架(而不是iframe)内容

kaz*_*aki 26 html javascript jquery frame

我在这样的一个页面中有2个框架(home.html)

<frameset rows="50%, 50%">
        <frame id="treeContent" src="treeContent.html" />
        <frame id="treeStatus"  src="treeStatus.html" />
</frameset>
Run Code Online (Sandbox Code Playgroud)

然后在一个框架(treeStatus.html)中我有类似的东西

<body style="margin: 0px">
<div id="statusText">Status bar for Tree</div>
</body>
Run Code Online (Sandbox Code Playgroud)

我希望从顶部窗口通过jquery操作位于子框架中的div(例如show和hide).

我看过几个 这样的问题 ,他们建议如下

$(document).ready(function(){

            $('#treeStatus').contents().find("#statusText").hide();
     });
Run Code Online (Sandbox Code Playgroud)

我不知道这是否适用于iframe,但在我的情况下,我有简单的框架它似乎不起作用.代码放在home.html中

这是来自firebug控制台的一些输出

>>> $('#treeStatus')
[frame#treeStatus]
>>> $('#treeStatus').contents()
[]
>>> $('#treeStatus').children()
[]
Run Code Online (Sandbox Code Playgroud)

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

回答

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

$('#statusText',top.frames["treeStatus"].document).hide();
Run Code Online (Sandbox Code Playgroud)

为此,框架必须具有除id之外的name属性,如下所示:

<frameset rows="50%, 50%">
            <frame id="treeContent" src="treeContent.html" />
            <frame name="treeStatus" id="treeStatus"  src="treeStatus.html" />
    </frameset>
Run Code Online (Sandbox Code Playgroud)

Cha*_*ell 12

你可以抓住Frame和div,你想要操纵它并将它传递给变量.

var statusText = top.frames["treeStatus"].document.getElementById('statusText');
Run Code Online (Sandbox Code Playgroud)

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

$(statusText).whatever();
Run Code Online (Sandbox Code Playgroud)

虽然有时你只是无法使用框架,但请记住,<frame>标签在HTML5中已经过时.如果您计划升级到HTML5,则必须使用iFrame.


RoT*_*oRa 5

您需要提供对您要访问的框架的引用:

$("some selector", top.frames["treeStatus"]))
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这个,它本身不起作用.看到便携式的答案后,我使用$("一些选择器",top.frames ["treeStatus"].文件))并添加"treeStatus"作为名称,除了id (2认同)

小智 5

我有嵌套框架.在我的情况下,为了使它工作我使用命令:

var statusText = 
top.document.getElementById("treeStatus").contentDocument.getElementById("statusText");
Run Code Online (Sandbox Code Playgroud)

然后,正如Charles已经回答的那样,你可以通过jQuery做任何你想做的事情:

$(statusText).whatever();
Run Code Online (Sandbox Code Playgroud)