所以我这样做:
var stuff = document.getElementsByTagName('iframe');
工作正常。然后我想这样做:
var other = stuff.getElementsByTagName('a');
但它不起作用。它最终未定义。我能做到:
var other = document.getElementsByTagName('a');
,没关系。我不能在'iframe'中获得所有'a'吗?
编辑:所以我不拥有iframe,现在我的印象是我无法访问任何iframe生成的内容,这意味着我猜我搞砸了。
答案 0 :(得分:10)
使用..
var iframe = document.getElementsByTagName('iframe')[0],
iframeDoc = iframe.contentWindow.document;
然后,您可以在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
。