在包含iFrames的页面上使用document.getElementsByTagName - iframe中的元素未被拾取

njj*_*j56 4 javascript iframe getelementsbytagname

更新的JavaScript.在我的页面(asp.net应用程序,vb作为服务器端语言),我使用document.getElementsByTagName("img")来获取所有img标记的html项目.我注意到一个特别没有出现在这个列表中(我能够将它们放入一个数组并单独访问这些项目 - 下面的代码).这个项目包含在iframe中(iframe不使用SRC或其他任何东西,只是定义了它内部的html就在源代码中,不会从另一个页面加载 - 这是由生成的水晶报表查看器自动生成的在运行时,这就是为什么我无法复制显示这个).getElementsByTagName是否因为它在iframe中而没有拾取此图像?我需要能够访问这个img的src(图像是水晶报表查看器中的另一个自动生成的项目).如果没有选择这个原因是因为iframe,有没有办法在iframe内的项目上运行它?或者只是获取iframe内部所有内容的"innerhtml"类型属性,以便可以访问img src.谢谢您的帮助.

var IMGmatches = [];
        var IMGelems = document.getElementsByTagName("img");
        for (var j = 0; j < IMGelems.length; j++) {
            IMGmatches.push(IMGelems[j]);
        }
Run Code Online (Sandbox Code Playgroud)

Nie*_*sol 6

那是因为iframe中的元素不是父文档的一部分.

要在iframe中获取任何内容,您需要访问iframe contentDocument.所以,你的代码可能如下所示:

var IMGmatches = [], IMGelems = document.getElementsByTagName("img"),
    iframes = document.getElementsByTagName('iframe'), l = IMGelems.length,
    m = iframes.length, i, j;
for( i=0; i<l; i++) IMGmatches[i] = IMGelems[i];
for( j=0; j<m; j++) {
    IMGelems = iframes[j].contentDocument.getElementsByTagName("img");
    l = IMGelems.length;
    for( i=0; i<l; i++) IMGmatches.push(IMGelems[i]);
}
Run Code Online (Sandbox Code Playgroud)

  • 您的编码风格完美地解释了“混淆”的含义。 (2认同)