Подтвердить что ты не робот

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()'/>
4b9b3361

Ответ 1

Используйте document.querySelectorAll('.verdana14.toAdd').

Обновление: FWIW, Ive написал связанный пост в блоге.

Ответ 2

getElementsByClassName не поддерживается IE8.

Вы должны использовать 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

Ответ 3

Вы можете написать свой собственный. Что-то вроде:

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

To:

GEBCN('verdana14 toAdd');

Ответ 4

используйте jQuery или отфильтруйте результаты из getElementsByTag

Ответ 5

Я написал эту небольшую библиотеку (менее 1кб), которая использует собственные методы для извлечения элементов dom. Если вы проверите метод className, вы найдете ответ на свой вопрос.

Найти JS на Github

Ответ 6

вы можете попробовать использовать jquery, поскольку у него есть альтернативный селектор классов, чтобы получить элементы там имена классов. $ ( ". testclass" ). Каждый... он предоставит вам требуемые элементы по именам классов