Javascript IE6 getElementsByTagName不工作

Javascript IE6 getElementsByTagName不工作,javascript,internet-explorer-6,getelementsbytagname,Javascript,Internet Explorer 6,Getelementsbytagname,我有一个示例页面,我试图将页面中每个youtube元素的wmode设置为“透明” 为此,我需要在页面中获取所有“object>params”和“embed”标记。 我链接你的页面在除IE6之外的所有浏览器中都像魅力一样工作(还没有检查其他IE)。 使用IE6时,我无法捕获“params”,因为document.getElementsByTagName('param')返回一个空对象,但“embed”不会发生这种情况! 它也不适用于document.getElementsByTagName('ob

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

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

这是这一页

有没有建议为什么不返回“param”标签


提前谢谢你

我记得
标记和
getElementsByTagName
有一些问题,但我不在IE6中编码已经很久了。尝试从
本身获取调用
getElementsByTagName
的参数,而不是从
文档中查询,并查看是否有帮助:

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

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

    alert(params.length);
}

我知道你想让你的应用程序向后兼容,但是这个练习违背了行业的一般方向,也违背了它让IE6停止运行的努力(即使对于IE6)。如果您专注于为伪现代浏览器构建更好的web体验,而不是担心传统浏览器,那么您的时间可能会得到更好的投资

发人深省——也许可以使用浏览器检测脚本,鼓励用户升级,这样他们就可以体验你的网站的所有现代荣耀:)


尽管如此,ZER0的建议是完全正确的。在页面中找到“object”标记,然后遍历其子项,直到找到要查找的标记。如果您似乎无法使用getElementsByTagName获取对象标记,那么您很可能必须遍历document.body.childNodes节点列表,并在此过程中进行检查。

如果您必须像旧的IE6那样支持浏览器,我强烈建议您使用jQuery之类的库,而不是尝试直接访问DOM

IE6有大量的bug和怪癖,甚至可以破坏最简单、最无害的Javascript代码。jQuery不遗余力地将这些浏览器错误和缺陷从开发人员那里抽象出来,允许您编写适用于所有浏览器的代码

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

当然,jQuery不仅仅是隐藏浏览器bug,但是如果您使用的是IE6,这就足以成为使用它的理由


(如果你真的因为某种原因不喜欢jQuery,当然也可以使用其他库)

我对IE 3.1和第一个netscape浏览器Nothing to do=\document有同样的问题。getElementsByTagName(“对象”)不会返回任何我在
中看到的
标记,我记得IE6在识别
对象
标记时遇到了一些问题,如果其中包含节点文本,则可能与嵌入相同。如果您只有
内部的
而没有其他内容,您可以测试
getElementsByTagName
是否有效吗?我可以尝试,但我无法控制脚本将运行的页面=\n我明白了,但至少您能够理解这个问题。如果我没有记错的话,这是IE6的一个bug,它是如何以与常规DOM节点完全不同的方式处理
标记的。在这种情况下,我担心如果你不能控制页面的内容,你就不能在IE6中做很多事情,当然不是以优雅的方式。我记得当IE6得到广泛支持时,我们通常将
标签包装在
中,这正是为了解决这类问题。我工作的公司的客户希望在所有浏览器上提供服务。我的上司想让我让它也在IE6上工作,让他改变主意不是我的工作。感谢您的回答。
for(var i=0;i跳过对象元素作为一名开发人员,你的工作的一部分是成为一名主题专业人士,介入其中并解释说,有时候,榨汁是不值得的。你的老板会因此爱上你的。你将为他节省开发时间、工时,最重要的是,节省资金。想想每次你在应用程序中添加一项功能时,你都要花多少时间调试IE6——花50%的时间调试一个不到5%的互联网用户使用的浏览器真的值得吗?()在这个问题上你已经浪费了多少时间?我们是在谈论我的工作还是如何解决问题?请继续主题。我尝试了jQuery('object'),但错误仍然存在。我放弃了。没有解决办法。我们将要求客户端直接在服务器上修复页面。