getElementsByClassName & IE8: Object ne supporte pas cette propriété ou méthode [dupliquer]

cette question a déjà une réponse ici:

je sais " getElementsByClassName " n'est pas de soutenir par IE8 . Tu sais ce que je peux utiliser à la place? Je suis agaçant par erreur

"cet Objet ne gère pas cette propriété ou cette méthode".

le code HTML est:

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

C'est le texte d'entrée qui appelle la fonction 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()'/>
47
demandé sur Gaurravs 2012-03-05 19:11:30

5 réponses

utiliser document.querySelectorAll('.verdana14.toAdd') .

Voir aussi mes blog post .

62
répondu Marat Tanalin 2018-03-11 16:50:44
La méthode

getElementsByClassName n'est pas supportée par IE8.

vous devez utiliser document.querySelectorAll('.classname') (fonctionne dans IE8+) ou une bibliothèque qui met en œuvre cette fonctionnalité comme:

  • jQuery
  • Moo Tools
  • DOJO
  • YUI
  • Prototype

    ... Parmi les autres...


querySelectorAll support:

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

getElementsByClassName appui:

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

14
répondu xandercoded 2013-03-27 19:09:28

vous pourriez écrire le vôtre. Quelque chose comme:

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;
}

fonctionne assez bien, mais vous pouvez écrire un plus rapide si vous voulez. Alors vous pouvez simplement changer:

document.getElementsByClassName('verdana14 toAdd');

à:

GEBCN('verdana14 toAdd');
8
répondu Paulpro 2012-03-06 04:45:07

utiliser jQuery, ou filtrer les résultats de getElementsByTag

0
répondu Simon Wang 2012-03-05 15:13:34

vous pouvez essayer d'utiliser jquery car il a le sélecteur de classe alternatif pour obtenir les éléments par là des noms de classe. $(".testclass").chacun... il vous donnera les éléments requis par noms de classe

-3
répondu Ganesh Bora 2013-05-10 10:34:53