在Iframe中选择元素的Div

Tir*_*ing 0 html javascript iframe jquery innerhtml

我在同一个域上有两个页面.Home.html和page2.html是他们的名字.

home.html具有以下内容

<html>
    <iframe id="one" src="page2.html" style="display:none"></iframe>
    <div id="container">        
        <h1>Title of Page</h1>
        <div id="ShowHere"></div>
    </div>
</html>
Run Code Online (Sandbox Code Playgroud)

page2.html具有以下内容.

<html>
   <div id="container">
       <span id="target">Some Text</span>
   </div>
   <span>Don't Show This Text</span>
</html>
Run Code Online (Sandbox Code Playgroud)

我想使用一些javascript从iframe中的id ="one"获取"target"的内容,然后更改元素id = ShowHere的innerhtml以显示元素中的html"目标"这样,它在"页面标题"一词下面显示"Some Text"字样.

我认为以下是一个开始,放在home.html的底部:

<script>
    var frameSource = document.getElementById("one").contentWindow.document.documentElement.outerHTML;
    // ANSWER TO MY QUESTION
    document.getElementById("ShowHere").innerHTML = frameSource;
</script>
Run Code Online (Sandbox Code Playgroud)

我已经四处搜索并看到了一些应该这样做的答案,但没有一个能提供有关如何做到这一点的有意义的解释,而且没有一个我可以开始工作.我更喜欢使用普通的jilla javascript,但Jquery也没问题.

基于我想要做的事情,即从同一个域上的另一个页面获取div的内容(即innerhtml),我想知道是否有比创建不可见的iframe更好的方法然后阅读它.通过另一种机制获得预期结果的答案也是受欢迎的.

Eug*_*bov 5

使用这个问题的答案

所以,首先你必须找到iframe:

var iframe = document.getElementById('one');
Run Code Online (Sandbox Code Playgroud)

然后你应该得到iframe内容:

var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Run Code Online (Sandbox Code Playgroud)

现在您可以使用getElementByIdiframe中的DOM元素:

var iframeContent;

if (iframeDocument) {
    iframeContent = iframeDocument.getElementById('target').innerHTML;
}
Run Code Online (Sandbox Code Playgroud)

现在,在iframeContent中,您需要在主页面上显示span的内容,因此您可以找到要显示iframeContent的元素并设置innerHTML属性:

var divToShow = document.getElementById('ShowHere');
divToShow.innerHTML = iframeContent;
Run Code Online (Sandbox Code Playgroud)

就这样.
我希望我的回答可以帮助您解决问题.
谢谢 : )

  • @TiredofGoogling 好吧,据我所知,这个解决方案在 jQuery 库中使用,但根据 MDN 文档:_From DOM iframe 元素,脚本可以通过 contentWindow 属性访问包含的 HTML 页面的 window 对象。contentDocument 属性指的是 iframe 内的文档元素(这相当于 contentWindow.document),但 IE8 之前的 Internet Explorer 版本不支持。_ (2认同)