2012-03-05 94 views
45

我知道“getElementsByClassName”不支持IE8。你知道我能用什么来代替吗?我越来越讨厌的错误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()'/> 
+0

jQuery有一个伟大的CSS选择器实现(包括类名搜索):http://jquery.com/ – 2012-03-05 15:15:08

+2

我爱jQuery的太多,以及运行IE8的东西几乎可以肯定不会让人望而却步开销,但对于纯粹的香草javascript querySelectorAll()是最好的答案,只要命名空间不在图片中。 – Swanny 2013-05-02 05:28:51

回答

0

使用jQuery,或者结果从getElementsByTag

过滤
7

你可以写你自己的。例如:

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'); 
+0

您需要更改'cn.replace('','。')',因为它只会替换第一个空格。你需要一个'g'全局正则表达式,它也会考虑相邻空间是一个。和'cn.split(/ /)'一样,它应该是全局的,并且测试相邻的空格,并且它应该包含其他空格字符,比如制表符,所以'\ s'可能更好。 – 2012-03-05 15:35:05

+0

@amnotiam谢谢,我被PHP弄糊涂了,忘记了哪一个替换掉了所有没有g修饰符的东西。我有意从'\ s'切换到'',因为我不认为这个函数会被制表符或换行符调用。我修改它以修剪尾随空格。 – Paulpro 2012-03-05 15:40:33

+0

是的,可能是关于制表符/新行的安全赌注。 – 2012-03-05 15:45:19

59

使用document.querySelectorAll('.verdana14.toAdd')。我写了一个相关的blog post

+1

这将提供最简单的解决方案,但您应该有'querySelectorAll'来获取多个元素。 – 2012-03-05 15:29:13

+1

谢谢,我通过用qsA替换qs来纠正了我的错误。 – 2012-03-05 15:40:23

+0

我下载了jQuery并使用了document.querySelectorAll('。verdana14.toAdd'); – 2012-03-07 03:22:51

-3

您可以尝试ü唱jquery,因为它有其他的类选择器来通过类名来获取元素。 $(“。testclass”)。each ...它会给你所需的类名称元素

0

我写了这个小型库(小于1kb),使用本机方法检索DOM元素。如果您查看className方法,您会发现问题的答案。

Find JS on Github

+4

您的链接已损坏。我知道这是一个较老的答案,但请在答案中包含解决方案。 – psaxton 2015-06-18 14:51:01

相关问题