2010-11-02 6 views
1

Existe-t-il un moyen meilleur/plus rapide de trouver tous les éléments avec un nom de classe dans les navigateurs qui ne prennent pas en charge document.getElementsByClassName?Meilleur moyen de trouver tous les éléments avec un nom de classe

var elements = document.getElementsByTagName('*'), 
    results = []; 

for (var i=0; i < elements.length; i++) { 
    (elements[i].className === selector) ? results.push(elements[i]) : null; 
} 
return results; 

Et non, je ne veux pas utiliser jQuery :)

+4

Cela ne se fait pas tous les éléments avec la classe, il obtient les éléments avec * uniquement * cette classe. –

+0

Hey! Je n'ai jamais remarqué ça :) est-ce qu'il y a un moyen de trouver des éléments avec la classe? – errorhandler

+1

@ user494211 - Quelque chose comme ceci: 'pour (var i = 0; i <éléments.longueur; i ++) {if (" "+ éléments [i] .className +" ".indexOf (" "+ sélecteur +" ")! = = -1) results.push (éléments [i]); } ' –

Répondre

2

Alors que IE8 ne prend pas en charge document.getElementsByClassName, il prend en charge document.querySelectorAll, de sorte que ce serait une option pour IE8 de toute façon.

Vous pouvez faire quelque chose comme:

function byClass(sel) { 
    var results; 
    if(document.querySelectorAll) { 
     results = document.querySelectorAll('.' + sel); 
    } else if(document.getElementsByClassName) { 
     results = document.getElementsByClassName(sel); 
    } else { 
     var elements = document.getElementsByTagName('*'), 
     results = []; 
     // and so on 
    } 
    return results; 
} 
Questions connexes