getElementsByClassName& IE8:Object不支持此属性或方法

时间:2012-03-05 15:11:30

标签: javascript internet-explorer-8

我知道“getElementsByClassName”不受IE8的支持。你知道我可以使用什么吗?我因错误而烦恼

  

“对象不支持此属性或方法”。

HTML代码为:

function sumar() {
var elems = document.getElementsByClassName('verdana14 toAdd');
var myLength = elems.length;
total = 0;
for (var i = 0; i < myLength; ++i) {
   if (elems[i].value!="") {
       total += parseInt(elems[i].value,10);
       }
    }

var promedio = total/myLength;
parseFloat(document.getElementById('promediocal').value = promedio.toFixed(2));
}

这是调用javascript函数的输入文本:

<input name='AE_EA_1_BIV_003_2' type='text' class='verdana14 toAdd' id='AE_EA_1_BIV_003_2' style='width:50px' onChange='sumar()'/>
<input name='AE_EA_1_BIV_003_3' type='text' class='verdana14 toAdd' id='AE_EA_1_BIV_003_3' style='width:50px' onChange='sumar()'/>
<input name='AE_EA_1_BIV_003_4' type='text' class='verdana14 toAdd' id='AE_EA_1_BIV_003_4' style='width:50px' onChange='sumar()'/>

5 个答案:

答案 0 :(得分:62)

使用document.querySelectorAll('.verdana14.toAdd')

另请参阅我的相关blog post

答案 1 :(得分:14)

IE8不支持

getElementsByClassName方法。

您应该使用document.querySelectorAll('.classname')(适用于IE8 +)或实现该功能的库 - 例如:

  • jQuery
  • Moo Tools
  • DOJO
  • YUI
  • Prototype

    ......其中......


querySelectorAll支持:

http://www.quirksmode.org/dom/w3c_core.html#t13

getElementsByClassName支持:

http://www.quirksmode.org/dom/w3c_core.html#t11

答案 2 :(得分:8)

你可以写自己的。类似的东西:

function GEBCN(cn){
    if(document.getElementsByClassName) // Returns NodeList here
        return document.getElementsByClassName(cn);

    cn = cn.replace(/ *$/, '');

    if(document.querySelectorAll) // Returns NodeList here
        return document.querySelectorAll((' ' + cn).replace(/ +/g, '.'));

    cn = cn.replace(/^ */, '');

    var classes = cn.split(/ +/), clength = classes.length;
    var els = document.getElementsByTagName('*'), elength = els.length;
    var results = [];
    var i, j, match;

    for(i = 0; i < elength; i++){
        match = true;
        for(j = clength; j--;)
            if(!RegExp(' ' + classes[j] + ' ').test(' ' + els[i].className + ' '))
                match = false;
        if(match)
            results.push(els[i]);
    }

    // Returns Array here
    return results;
}

工作得很好,但如果你愿意,你可以写一个更快的。然后你可以改变:

document.getElementsByClassName('verdana14 toAdd');

要:

GEBCN('verdana14 toAdd');

答案 3 :(得分:0)

使用jQuery,或过滤getElementsByTag的结果

答案 4 :(得分:-3)

你可以尝试使用jquery,因为它有替代的类选择器来获取类名的元素。 $(“。testclass”)。each ...它将按类名称为您提供所需的元素