Javascript IE6 getElementsByTagName无效

时间:2012-03-31 13:14:29

标签: javascript internet-explorer-6 getelementsbytagname

我有这个示例页面,我试图将页面中每个youtube元素的wmode设置为“透明”。

要做到这一点,我需要在页面中获取所有“object> params”和“embed”标签。 我链接你的页面在所有浏览器中都像魅力一样工作,除了IE6(还没有其他的IE)。 使用IE6我无法捕获“params”,因为document.getElementsByTagName('param')返回一个空对象,但这不会发生在“embed”中! 它不适用于document.getElementsByTagName('object')

这是页面http://dl.dropbox.com/u/4064417/provaJs.html

有什么建议为什么它不仅仅返回“param”标签?

提前谢谢!

3 个答案:

答案 0 :(得分:1)

我回想起<param/>代码和getElementsByTagName的一些问题,但是我的代码在IE6中没有代码。而不是从document查询,尝试从getElementsByTagName本身调用<object />来查看是否有帮助:

var objects = document.getElementsByTagName("object");

for (var i = 0, object; object = objects[i++];) {
    var params = object.getElementsByTagName("param");

    alert(params.length);
}

答案 1 :(得分:1)

我知道你希望你的应用程序向后兼容,但是这个练习与行业的总体方向以及让IE6停滞不前(IE6甚至google has dropped support)的努力背道而驰。如果您专注于为伪现代浏览器构建更好的Web体验而不是担心遗留的浏览器,那么您的时间可能会更好。

深思熟虑 - 可能会使用浏览器检测脚本并鼓励您的用户进行升级,以便他们可以体验您的网站所有的现代辉煌:)

所有这一切,ZER0的建议都是死的。在页面中找到“对象”标签,然后遍历其子项,直到找到您要查找的标签。如果您似乎无法使用getElementsByTagName获取对象标记,则可能必须遍历document.body.childNodes节点列表,并在此过程中检查typeof(N) or N.NodeName

答案 2 :(得分:0)

如果你必须支持浏览器作为旧IE6,我强烈建议使用jQuery等库,而不是直接尝试访问DOM。

IE6有大量的错误和怪癖,可以打破最简单,最无害的Javascript代码。 jQuery竭尽全力从开发人员那里抽象出这些浏览器漏洞和缺陷,允许您编写适用于所有浏览器的代码。

例如,您可以使用jQuery代码document.getElementsByTagName('object')而不是使用$('object'),它将为您提供相同的最终结果,但可以解决最终用户运行的任何浏览器中的任何错误。

当然,jQuery做的不仅仅是隐藏浏览器错误,但是如果你正在使用IE6,那么这就是使用它的充分理由。

(如果您因某种原因真的不喜欢jQuery,其他库当然可用)