1

我在一个页面中有一个 iframe,它的 src 设置为同一本地机器上的一个文件(不是跨域)。

所以我有一个看起来像这样的页面:

<html>
 <head/>
 <body><iframe id="something" src="somepage.html"/></body>
</html>

iframe里面有一些内容

    <html>
    <head/>
     <body>
      <li>
        <ul>stuff</ul>
      </li>
     </body>
    </html>

我的问题是,我有一个变量(在我的索引页面中)当前指向var element = <ul>stuff</ul>iframe 内部的元素。

从这个变量中,我希望能够访问父 iframe 并获取 id 'something'。

我一直在尝试一些 jquery 使用 find 没有运气

$(element).find('iframe')

而且我想知道我哪里出错了......我已经用谷歌搜索了其他解决方案,但它们都与在 iframe 之外寻找有关,我想我在里面寻找!还有其他人可以帮助阐明一些问题吗?

4

2 回答 2

1

At first, it's a good practice to set name for iframe if you want to access some data in it. After that to access iframe's DOM you can use:

$('ul', window.frames['iframe_name'].document);

To access global variables

alert(window.frames['iframe_name'].some_global_var_or_function_of_iframe)

If you want to get some parent data inside iframe:

$('selector', parent.document) // for DOM
alert(parent.some_global_var_or_function_of_parent_window)

EDIT So in your case just use:

$('iframe', parent.document).filter(function(iframe){
    // you can compare iframes like this
    return iframe.getAttribute('src') == location.href
}).attr('id')
于 2012-08-17T09:07:14.707 回答
1

如果没有类似名称的内容,似乎很难找到 iframe 元素的 id。

但是假设您知道 iframe 中的 html 文件的名称(“somepage.html”),这看起来很自然,您可以这样做来获取父文档中包含 iframe 的元素:

var $matching = $(parent.document).find('iframe').filter(function(){
    var srcTokens = this.src.split('/');
    return srcTokens[srcTokens.length-1]=='somepage.html';
});

这是我用来测试的“somepage.html”文件,将 id 记录在控制台中:

<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        </head>
     <body>
      <li>
        <ul>stuff</ul>
      </li>
      <script>
          var $matching = $(parent.document).find('iframe').filter(function(){
              var srcTokens = this.src.split('/');
              return srcTokens[srcTokens.length-1]=='somepage.html';
          });
          console.log($matching.attr('id'));
          </script>
     </body>
    </html>

编辑:正如 Serjio 所见,location.href如果您不知道 html 文件的名称,则可以使用。

于 2012-08-17T09:18:17.997 回答