的getElementsByTagName( 'A');不工作?

时间:2012-02-20 04:35:43

标签: javascript html dom

所以我这样做:

var stuff = document.getElementsByTagName('iframe');

工作正常。然后我想这样做:

var other = stuff.getElementsByTagName('a');

但它不起作用。它最终未定义。我能做到:

var other = document.getElementsByTagName('a');

,没关系。我不能在'iframe'中获得所有'a'吗?

编辑:所以我不拥有iframe,现在我的印象是我无法访问任何iframe生成的内容,这意味着我猜我搞砸了。

5 个答案:

答案 0 :(得分:10)

使用..

var iframe = document.getElementsByTagName('iframe')[0],
    iframeDoc = iframe.contentWindow.document;

Specification

然后,您可以在getElementsByTagName('a')上致电iframeDoc。或者,您可以访问iframeDoc.links,这可能与您完全相同,但可能就是您想要的。

当然,这一切都依赖于访问iframe document而不是Same Origin Policy

答案 1 :(得分:4)

getElementsByTagName()返回一个NodeList,你需要迭代它。要迭代它,你可以这样做:

for (var i = 0; i < stuff.length; i++) {   
    var other = stuff[i].getElementsByTagName('a');
}  

但是,getElementsByTagName('a')要求当前文档中的子项,这几乎肯定不是您想要的。如果您希望框架中的文档中包含子项,则需要执行以下操作:

for (var i = 0; i < stuff.length; i++) {   
    var other = stuff[i].contentWindow.document.getElementsByTagName('a');
}  

如果您有多个iframe,并且在旧版本的IE中,这将有效。

答案 2 :(得分:3)

stuff[0].contentWindow.document.getElementsByTagName('a')

应该生成一个类似于数组的对象,其中包含第零个iframe中的所有链接。

您需要使用contentWindow.document,因为<iframe>不包含当前文档中的任何节点 - 它是contentWindow属性指向具有自己文档的不同窗口的框架

答案 3 :(得分:2)

getElementsByTagName返回匹配元素的数组。要访问单个IFRAME,您可以使用stuff[0]

答案 4 :(得分:0)

为什么每个人都建议contentWindow.document何时只能使用contentDocument

当然,两者都有效,但我更喜欢用我的意思。如果我想要窗口,我使用contentWindow。如果我想要文档,我使用contentDocument