2011-01-10 19 views

risposta

12

In assenza di jQuery, vorrei usare qualcosa di simile:

<script> 
    var divsToHide = document.getElementsByClassName("classname"); //divsToHide is an array 
    for(var i = 0; i < divsToHide.length; i++){ 
     divsToHide[i].style.visibility = "hidden"; // or 
     divsToHide[i].style.display = "none"; // depending on what you're doing 
    } 
<script> 

Questo è preso da questa domanda SO: Hide div by class id, però visto che si Stai chiedendo la soluzione JS "vecchia scuola", credo che getElementsByClassName sia supportato solo dai browser moderni

+0

Grazie per la nuova risposta a una vecchia domanda! Sicuramente molto meglio con il metodo integrato. – MrGlass

0

utilizzare una versione modificata di questo:

function getElementsByClass(nameOfClass) {  
    var temp, all, elements; 

    all = document.getElementsByTagName("*"); 
    elements = []; 

    for(var a=0;a<all.length;a++) { 
    temp = all[a].className.split(" "); 
    for(var b=0;b<temp.length;b++) { 
     if(temp[b]==nameOfClass) { 
     elements.push(ALL[a]); 
     break; 
     } 
    } 
    } 
    return elements; 
}; 

e jQuery farà davvero troppo facilmente.

+1

un controllo per getElementsByClassName incorporato sarebbe muc h più efficiente. –

11
function getElementsByClassName(classname, node) { 
    if(!node) node = document.getElementsByTagName("body")[0]; 
    var a = []; 
    var re = new RegExp('\\b' + classname + '\\b'); 
    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 elements = new Array(); 
elements = getElementsByClassName('yourClassName'); 
for(i in elements){ 
    elements[i].style.display = "none"; 
} 
+0

+1 Regex awesomeness – Ben

+1

Terminato utilizzando una versione modificata di questo. Grazie. – MrGlass

+1

Ciò sarebbe migliorato testando e utilizzando il metodo incorporato 'document.getElementsByClassName()' dove presente. –

-1

So che il PO non vuole librerie di alto livello, ma, a meno che non v'è una reale necessità di limitare dimensioni e di calcolo, io suggerisco di usare uno, anche se non sarà utilizzato in altre parti dell'applicazione .

Ad esempio, utilizzando jQuery è molto semplice:

$('.myClass').hide() 
+12

Se volessi usare jquery, lo avrei detto. – MrGlass

+1

Questo era solo un suggerimento per considerare jQuery: anche io non volevo usare jQuery all'inizio; così ho iniziato a creare una serie crescente di funzioni personalizzate per le mie esigenze. Alla fine, ho capito che jQuery copriva le mie specifiche e molte altre cose di cui avrei avuto bisogno. Quindi, ho iniziato a utilizzare jQuery. – Don

+7

@MrGlass - di nuovo, sii specifico nella tua domanda. Non essere cattivo, sii gentile! – Kev

1

Supponendo che avete a che fare con una sola classe per ogni elemento:

function swapCssClass(a,b) { 
    while (document.querySelector('.' + a)) { 
     document.querySelector('.' + a).className = b; 
    } 
} 

e quindi chiamare semplicemente chiamare con

swapCssClass('x_visible','x_hidden'); 
+0

Considera di usare 'document.getElementsByClassName' invece di mettere insieme il selettore – shea

14

Risposta tardiva, ma ho scoperto che questa è la soluzione più semplice (se non lo fai utilizzare jQuery):

var myClasses = document.querySelectorAll('.my-class'), 
    i = 0, 
    l = myClasses.length; 

for (i; i < l; i++) { 
    myClasses[i].style.display = 'none'; 
} 

Demo

+0

hai un piccolo bug nel codice: alla fine delle prime 2 righe di codice dovresti avere"; " non ",". Con quello risolto il codice scorre perfetto –

+0

Non un bug, @alexalex. Dichiaro variabili separate da virgole. Vedi http: // StackOverflow.it/questions/11076750/what-does-variable-declaration-with-multiple-comma-separated-values-mean-egv per ulteriori informazioni – HoffZ

+1

grazie per avermelo segnalato e mi dispiace per il primo commento non ben verificato, ho provato a aiuto nient'altro :) - Ho finito per imparare qualcosa di nuovo :) –

Problemi correlati