是否有可能getElementsByTagName实际上没有返回所有元素?

时间:2014-02-21 20:20:20

标签: javascript

我知道这很愚蠢,但我真的不明白发生了什么,我从我的js中调用了一个简单的getElementsByTagName

var script_elements = document.getElementsByTagName('script');
//then i loop
for(a = 0; a < script_elements.length ; a++)
{
     alert(script_elements[a].getAttribute('src'));
}

但它不会警告所有存在script src元素的getElementsByTagName元素,我认为文档可能没有完全加载,这就是为什么我遇到这个问题,并且确定我在开始之前添加了document.getElementsByTagName('html')[0].innerHTML这个{{1}}并且我确实得到了源代码并且没有遗漏任何东西,我发现的唯一解决方案是使用正则表达式并捕获我想要的但是它很愚蠢考虑JS有简单的内置方法。

提前感谢。

2 个答案:

答案 0 :(得分:0)

我正在等待某人做荣誉并接受它,但是因为没有人会这样做,因为它可以帮助别人,所以非常感谢你们$(document).ready()做了:

$(document).ready(

    var script_elements = document.getElementsByTagName('script');
    for(a = 0; a < script_elements.length ; a++)
    {
       //treatment
    }

)

答案 1 :(得分:-2)

根据我的经验,getElementsByTagName始终返回所有元素,但警报并不总是显示警报。我会使用console.log而不是alert。这将始终记录元素。

我很好奇使用getAttribute而不是元素的src属性。我没有充分的理由,但是当dom中的某个属性也可以使用时,我不使用getAttribute。换句话说,我只使用getAttribute访问我定义的属性,而dom一无所知。我的观点是,在每种情况下,我对getAttribute将为src属性返回的内容都很弱,但是我知道console.log会告诉你,即使它是null,哪个警报也不行(根据我的经验,我还没读过)规范,所以我不知道应该做什么警报)

对于那些担心您必须等待文档加载的人来说,这不是我的经验。除非您按顺序放置脚本标记,否则脚本将按顺序加载。只要在您要检查的脚本之后在文档中出现此脚本,您就会看到它们。