getElementsByClassName & IE8: Object doesn't support this property or method [duplicate] getElementsByClassName & IE8: Object doesn't support this property or method [duplicate] javascript javascript

getElementsByClassName & IE8: Object doesn't support this property or method [duplicate]


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

See also my related blog post.


getElementsByClassName method is not supported by IE8.

You should use document.querySelectorAll('.classname') (works in IE8+) or a library that implements that functionality - like:

  • jQuery

  • Moo Tools

  • DOJO

  • YUI

  • Prototype

    ... Among others...


querySelectorAll support:

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

getElementsByClassName support:

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


You could write your own. Something like:

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

Will work pretty well, but you could write a faster one if you want to. Then you can just change:

document.getElementsByClassName('verdana14 toAdd');

To:

GEBCN('verdana14 toAdd');