【问题标题】:Is there a way to access Dom outside iframe from element within it?有没有办法从其中的元素访问 iframe 外部的 Dom?
【发布时间】:2016-05-14 11:11:09
【问题描述】:

我们有办法通过 iframe 向下遍历 DOM 到 #btn1 我们可以通过$('#iframe1').contents().find('#iframe2').contents().find('#btn1')来做到这一点

我正在努力将 DOM 从 #btn1 向上移动到 #iframe2 之外

下面的代码给了我[]。将 btnElement 视为 jquery#btn 对象

`btnElement.closest('iframe')`

这都不行

btnElement.parent().parent().parent()

有没有办法从 btn1 访问 iframe2 之外的 Dom??

注意:所有 iframe 都属于同一个来源。跨起源不是我关心的问题

【问题讨论】:

    标签: javascript jquery html dom iframe


    【解决方案1】:

    你不能遍历它,不; jQuery 使用的 DOM 植根于 iframe 的窗口。

    但是那个窗口对象有一个parent 属性,它指向父窗口。因此,您可以使用它来访问父窗口中的内容。

    如果父窗口也加载了jQuery,可以这样使用:parent.$("selector")

    如果父窗口没有加载 jQuery 但 iframe 加载了,您通常可以像这样在父窗口中查找内容:$(parent.document).find("selector"),但 jQuery 的其他用途可能是松鼠,最好尽可能使用实例从加载它的窗口中获取 jQuery。

    (只有当框架和它的父框架从同一个来源加载时,你才能这样做。)


    你的评论:

    唯一给我的就是。 btn1 的 jquery 对象。如何找出它的父 iframe 元素。 ?

    我想访问这个 iframe 之外的 DOM 比如说例如我想知道当前 iframe 的父 div

    我不相信有任何直接的方法可以做到这一点,不,你必须寻找:jQuery 对象内的按钮元素(例如,btn1[0])有一个名为ownerDocument 的属性,它将是@987654326 @。 iframe 元素有一个 contentDocument 属性,它指的是同一件事。所以你用parent得到父窗口,然后找到里面所有的iframe,选择有.contentDocument === btn[0].ownerDocument的那个:

    var btn1 = $("#btn");
    var doc = btn1[0].ownerDocument;
    var iframe = $(parent.document).find("iframe").filter(function() {
        return this.contentDocument === doc;
    });
    if (iframe.length) {
        // We have the `iframe` element. To get its parent, we'd use
        // `iframe.parent()`. Let's give it a green border:
        iframe.parent().css("border", "1px solid green");
    }
    

    【讨论】:

    • 一切都是从同一个来源加载的
    • 挑战 1) 唯一给我的就是。 btn1 的 jquery 对象。如何找出它的父 iframe 元素。 ?
    • @RohitKumar:“它的父 iframe 元素”是什么意思?你的意思是它的父 window,还是你的字面意思是父的父中包含当前 iframe 父窗口的 iframe 元素?
    • 我的意思是 iframe 标签。我们当然可以通过执行 btnElement.parent().parent() 到达当前 iframe 的主体,但是添加另一个 parent() 像 btnElement.parent().parent().parent() 将返回 []
    • @RohitKumar:我不相信有任何 直接 方法可以做到这一点,不,你必须寻找:jQuery 对象内的按钮元素(例如,@987654332 @) 有一个名为ownerDocument 的属性,即=== (theWindowThatContainsIt).documentiframe 元素有一个 contentDocument 属性,它指的是同一件事。所以你用parent来获取父窗口,然后找到里面所有的iframe,选择有.contentDocument === btn[0].ownerDocument的那个。
    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 2020-09-15
    • 1970-01-01
    • 2018-12-19
    • 2018-11-24
    • 2012-12-24
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多