2012-02-24 15 views

risposta

46

document.getElementsByClassName(klass)

essere consapevoli del fatto che alcuni motori (in particolare i browser più vecchi) non ce l'hanno. Potresti prendere in considerazione l'utilizzo di uno shim, se è il caso. Sarà lento e itererà sull'intero documento, ma funzionerà.

1

In some browsers c'è una funzione document.getElementsByClassName(class). Altrimenti, l'unica opzione che hai è quella di iterare su tutti gli elementi nel documento controllandone ognuno rispetto alla tua condizione di avere il nome di classe richiesto.

15
document.getElementsByClassName('your class'); 

o si può costruire il nome di classe come questo, se non funziona provate questo

if (!document.getElementsByClassName) { 
    document.getElementsByClassName=function(cn) { 
     var allT=document.getElementsByTagName('*'), allCN=[], i=0, a; 
     while(a=allT[i++]) { 
      a.className==cn ? allCN[allCN.length]=a : null; 
     } 
     return allCN 
    } 
} 
1

Questo dovrebbe funzionare:

function(className) 
{ 
    var matchingItems = []; 
    var allElements = document.getElementsByTagName("*"); 

    for(var i=0; i < allElements.length; i++) 
    { 
     if(allElements [i].className == className) 
     { 
      matchingItems.push(allElements[i]); 
     } 
    } 

    return matchingItems; 
} 
+0

Sì, ma non mi consiglia di utilizzare lo in questo modo, ho provato a fare qualcosa del genere e poi ho avuto un enorme problema di prestazioni in IE7, dato che funziona molto lentamente –

+0

Sono d'accordo. Ci sono sicuramente soluzioni più eleganti. Vedo che @Kunal di seguito utilizza espressioni regolari che sono pure più pulite. Stavo solo fornendo un'opzione rapida in modo che il richiedente potesse farsi un'idea. – spinon

+1

Questo non funzionerà se all'elemento sono applicate due classi –

0
 

function getElementsByClassName(oElm, strTagName, strClassName){ 
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : 
     oElm.getElementsByTagName(strTagName); 
    var arrReturnElements = new Array(); 
    strClassName = strClassName.replace(/\-/g, "\\-"); 
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)"); 
    var oElement; 
    for(var i=0; i<arrElements.length; i++){ 
     oElement = arrElements[i];  
     if(oRegExp.test(oElement.className)){ 
      arrReturnElements.push(oElement); 
     } 
    } 
    return (arrReturnElements) 
} 

 
+0

Questo è simile a uno snippet di codice in un libro Punto del sito. Sei curioso di sapere se questa è la fonte, o è solo una strana coincidenza? – pqsk

34

Un semplice e un modo semplice

var cusid_ele = document.getElementsByClassName('custid'); 
for (var i = 0; i < cusid_ele.length; ++i) { 
    var item = cusid_ele[i]; 
    item.innerHTML = 'this is value'; 
} 
+0

Quando si va avanti, il ciclo salterà ogni seconda entrata se gli elementi vengono eliminati nel ciclo. Quindi, meglio andare indietro. (Ho modificato la risposta di conseguenza, in attesa di revisione tra pari). –

Problemi correlati