82

我有一个iframe这样的

<iframe name="myframe1" id="myframe1" width="100%" height="100%" src="a.html">
<html>
    <head></head>
    <frameset name="myframe2" cols="0%, 100%" border="0" frameBorder="0" frameSpacing="0">
        <frame name="page1" src="c.html" scrolling="no"></frame>
        <frame name="page2" src="d.html" >
            <html>
                <head></head>
                <body id="top">
                    <div id="div1">
                        <div id="div2">
                            <div id="div3">
                                <ul id="x">
                                    <li>a</li>
                                    <li>b</li>
                                </ul>
                            </div>
                        </div>
                    </div>
                </body>
            </html>

        </frame>

    </frameset>
</html>
</iframe>

我想引用元素“x”。我尝试了几种方法,但找不到解决方案。

4

5 回答 5

189
document.getElementById('myframe1').contentWindow.document.getElementById('x')

小提琴

contentWindow所有浏览器都支持,包括旧版本的 IE。

请注意,如果iframe's来自另一个域,由于Same Origin Policysrc,您将无法访问其内容。

于 2013-01-22T04:08:04.597 回答
22

用来contentDocument实现这个

var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) 
               ? iframe.contentDocument 
               : iframe.contentWindow.document;

var ulObj = innerDoc.getElementById("ID_TO_SEARCH");
于 2013-01-22T04:10:13.513 回答
5

(这是添加到所选答案中)

确保iframe在您之前加载

contentWindow.document

否则,您getElementById将是null.

PS:无法发表评论,评论的声誉仍然很低,但这是对所选答案的跟进,因为我花了一些很好的调试时间试图弄清楚我应该iframe在选择内部 iframe 元素之前强制加载。

于 2019-06-24T15:43:08.070 回答
1

您需要确保框架已完全加载,最好的方法是使用 onload:

<iframe id="nesgt" src="" onload="custom()"></iframe>

function custom(){
    document.getElementById("nesgt").contentWindow.document;
    }

此功能将在 iframe 完全加载时自动运行。

于 2020-06-30T13:29:14.270 回答
0

就我而言,我试图抓取pdfTron工具栏,但不幸的是,每次刷新页面时它的ID都会发生变化。

所以,我最终通过这样做抓住了它。

const pdfToolbar = document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById('HeaderItems');

正如在 tagName 写入的数组中一样,您的应用程序中将始终拥有 iFrame 的固定索引。

于 2019-06-26T08:05:34.500 回答