JavaScript在IE浏览器中使用getElementsByClassName函数存在问题

5

首先,我正在学习JS,在掌握所需知识前不会使用库。

http://www.tombarrasso.com/search/

话虽如此,为什么我的代码在< IE 7, Firefox < 3等浏览器中不能正常工作呢? Safari 4完美运行,Firefox 3.5也很好。 我使用的是Robert Nyman的getElementsByClassName函数。

它在我的OS X上的IE 6(通过Wine)中没有错误。 Ajax请求正常,但应该有一个初始的id="one"且class="scroller"的div,但实际上没有。 这让我非常沮丧。

谢谢,

  • 汤姆

你可以张贴一下代码吗?我不确定在哪里找到它 :D - Gordon Gustafson
http://www.tombarrasso.com/search/x.js - Tom
1
原来 .setAttribute("class", "scroller") 对于某些IE浏览器不太好用,所以我还需要使用 .setAttribute("className", "scroller")。此外,我需要将所有的.appendChild()放在一行中,因为IE不能从一个到下一个保持它们。但是IE 8并不像IE 6和7那样遵守这些规则。 - Tom
1
请参阅http://blogs.msdn.com/ie/archive/2009/03/12/site-compatibility-and-ie8.aspx,了解有关className的更改说明。 - EricLaw
谢谢Eric Law,那个链接很棒。 - Tom
4个回答

8

...或者您可以使用这个更好的解决方案...

if (typeof document.getElementsByClassName!='function') {
    document.getElementsByClassName = function() {
        var elms = document.getElementsByTagName('*');
        var ei = new Array();
        for (i=0;i<elms.length;i++) {
            if (elms[i].getAttribute('class')) {
                ecl = elms[i].getAttribute('class').split(' ');
                for (j=0;j<ecl.length;j++) {
                    if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) {
                        ei.push(elms[i]);
                    }
                }
            } else if (elms[i].className) {
                ecl = elms[i].className.split(' ');
                for (j=0;j<ecl.length;j++) {
                    if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) {
                        ei.push(elms[i]);
                    }
                }
            }
        }
        return ei;
    }
}

3

个人而言,我会选择使用jQuery,因为它已经解决了你遇到的浏览器兼容性问题。

学习所有相关知识当然是好的,但是在处理实现兼容性时最好让它自动处理,这是我的个人看法。有些事情我就不太关心 :P


2

当我们在JavaScript中使用getElementsByClassName时,IE8会出现错误-"Object doesn't support property or method"。请尝试使用以下方法。

if (document.getElementsByClassName) {
    var obj = document.getElementsByClassName('classA');
}

0

我使用了jQuery来解决支持ie7这些老旧的客户端的问题。

原文:

var editrow = grid.get_element().getElementsByClassName("rgEditRow")[0];

新:

var editrow = $(".rgEditRow", grid.get_element())[0];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接