Javascript document.getElementsByClassName Kompatibilität mit IE

Was ist die beste Methode, um ein array von Elementen mit einer bestimmten Klasse?

Ich würde Dokuments verwenden.getElementsByClassName, aber IE nicht unterstützt.

Also versuchte ich Jonathan Snook ist die Lösung:

function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('(^| )'+classname+'( |$)');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}
var tabs = document.getElementsByClassName(document.body,'tab');

...aber IE sagt immer noch:

Objekt unterstützt diese Eigenschaft oder Methode

Irgendwelche Ideen, bessere Methoden, bug-fixes?

Würde ich lieber nicht verwenden, um irgendwelche Lösungen mit jQuery oder anderen "sperrigen javascript".

Update:

Ich es geschafft habe!

Als @joe erwähnt die Funktion ist keine Methode von document.

Also den funktionierenden code würde wie folgt Aussehen:

function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('(^| )'+classname+'( |$)');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}
var tabs = getElementsByClassName(document.body,'tab');

...Auch wenn Sie nur IE8+ Unterstützung dann funktioniert:

if(!document.getElementsByClassName) {
    document.getElementsByClassName = function(className) {
        return this.querySelectorAll("." + className);
    };
    Element.prototype.getElementsByClassName = document.getElementsByClassName;
}

Verwenden Sie es, wie normal:

var tabs = document.getElementsByClassName('tab');
Kommentar zu dem Problem
Sind Sie sicher, dass Ihr update-Recht? Sollte es nicht var tabs = getElementsByClassName(document.Körper,'tab'); **beachten Sie, dass ich entfernt Dokument.getEle... ** Kommentarautor: Anthony
Danke @Anthony. Ich nahm Joes Antwort. Kommentarautor: Web_Designer
Sind deine letzten Beispiele richtig? Sie passieren '.Registerkarte' aber sollte es nicht ohne die Zeit, da Ihre inneren Methode fügt die Zeit und wenn es mit dem IE9+, dann ist es nicht die Zeit, oder? Sollte es nicht var tabs = document.getElementsByClassName('tab');? Und warum hast du ein "oder", wenn die letzten beiden Beispiele sind die gleichen? Ich muss etwas fehlen. Kommentarautor: BoBoCoding
@BoBoCoding behoben. Kommentarautor: Web_Designer

InformationsquelleAutor der Frage Web_Designer | 2011-09-14

Schreibe einen Kommentar