JavaScript - 文档内的 iframe:getElemById()

发布于 2024-11-17 14:10:59 字数 882 浏览 1 评论 0原文

我有以下页面代码:

<html>
  <body>
    <div id="AAA"> SOME CODE </div>
    <div>
      <iframe>
        <html>
          <div id="AAA"> SOME CODE </div>
          <div id="myDiv"> MORE CODE </div>
        </html>
      </iframe>
      <iframe>
        <html>
          <div id="AAA"> SOME CODE </div>
          <div id="myDiv2"> MORE CODE </div>
        </html>
      </iframe>
    </div>
  </body>
</html>

现在,有趣的部分。 我可以将手放在 div "myDiv" 上。然后我想修改同一个 iframe 中的 div "AAA" 的内容。 但是,如果我这样做,

 myDiv.ownerDocument.getElementById("AAA")

我会得到 iframe 之外的元素 - 请注意,存在 id="AAA" 的三个元素...

我的问题是,给定一个元素,我如何将手放在其包含的 iframe 上,而不是放在最上面顶级文件?

任何帮助表示赞赏。

I have the following page code:

<html>
  <body>
    <div id="AAA"> SOME CODE </div>
    <div>
      <iframe>
        <html>
          <div id="AAA"> SOME CODE </div>
          <div id="myDiv"> MORE CODE </div>
        </html>
      </iframe>
      <iframe>
        <html>
          <div id="AAA"> SOME CODE </div>
          <div id="myDiv2"> MORE CODE </div>
        </html>
      </iframe>
    </div>
  </body>
</html>

Now, the fun part.
I can put my hands on the div "myDiv". Then I want to modify the content of div "AAA", the one that is in the same iframe.
However if I do

 myDiv.ownerDocument.getElementById("AAA")

I get the element outside the iframe - notice there are three elements with id="AAA"...

My question is, given an element, how can I put my hands on its containing iframe, and not on the most top level document?

Any help is appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

赠意 2024-11-24 14:10:59

从我的袖子里,尝试这样的功能:

function GetTopElement(child) {
    var parent = child.parentNode;
    while (parent) {
        var node = parent.nodeName.toLowerCase();
        if (node == "body" || node == "html")
            break;
        parent = parent.parentNode;
    }
    return parent;
}

//usage:
var topLevel = GetTopElement(myDiv);
topLevel.getElementById("AAA")...

Out of my sleeve, try such function:

function GetTopElement(child) {
    var parent = child.parentNode;
    while (parent) {
        var node = parent.nodeName.toLowerCase();
        if (node == "body" || node == "html")
            break;
        parent = parent.parentNode;
    }
    return parent;
}

//usage:
var topLevel = GetTopElement(myDiv);
topLevel.getElementById("AAA")...
世界等同你 2024-11-24 14:10:59

使用 jQuery:$('iframe').contents().find('#123')

Use jQuery: $('iframe').contents().find('#123')

£烟消云散 2024-11-24 14:10:59

不能用下面的吗?

first_iframe = document.getElementsByTagName('iframe')[0];
first_iframe.contentWindow.document.getElementById('123')

然后你可以引用连续的 iframe:

first_iframes_child = first_iframe.document.getElementsByTagName('iframe')[0];
...

虽然我建议你的公司使用 jQuery/Prototype 而不是使用 iframe,但它可能会让你的生活更轻松。

Can you not use the following?

first_iframe = document.getElementsByTagName('iframe')[0];
first_iframe.contentWindow.document.getElementById('123')

Then you can reference sucesive iframes:

first_iframes_child = first_iframe.document.getElementsByTagName('iframe')[0];
...

Though I'd advise to your company to use jQuery/Prototype and not use iframes, it'll probably make your life easier.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文