2011-01-10 84 views
14

Normalmente uso document.getElementById('id').style.display = 'none' para ocultar un solo div a través de Javascript. ¿Existe una forma similarmente simple de ocultar todos los elementos que pertenecen a la misma clase?Ocultar todos los elementos con clase usando Javascript simple

Necesito una solución simple de Javascript que no utiliza jQuery.

Respuesta

12

En ausencia de jQuery, me gustaría utilizar algo como esto:

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

Esto está tomado de esta cuestión de forma: Hide div by class id, sin embargo al ver que se Estoy pidiendo una solución JS de "la vieja escuela", creo que getElementsByClassName solo es compatible con los navegadores modernos

+0

¡Gracias por la nueva respuesta a una vieja pregunta! Definitivamente mucho mejor con el método incorporado. – MrGlass

0

utilizar una versión modificada de este:

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

y jQuery va a hacer esto realmente fácil también.

+1

un cheque para getElementsByClassName integrado sería h más eficiente. –

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 awesomeness de Regex – Ben

+1

Terminé usando una versión modificada de esto. Gracias. – MrGlass

+1

Esto se mejoraría probando y utilizando el método integrado 'document.getElementsByClassName()' donde esté presente. –

-1

sé el PO no quiere bibliotecas de alto nivel, pero, a menos que exista una necesidad real de limitar el tamaño y la computación, se sugiere emplear una, incluso si no va a ser utilizado en otras partes de la aplicación .

Por ejemplo, el uso de jQuery es muy simple:

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

Si quisiera usar jquery, lo habría dicho. – MrGlass

+1

Eso solo era una pista para considerar jQuery: tampoco quería usar jQuery al principio; así que comencé a construir un conjunto creciente de funciones personalizadas para mis necesidades. Finalmente, me di cuenta de que jQuery cubría mis especificaciones y muchas otras cosas que necesitaría. Entonces, comencé a usar jQuery. – Don

+7

@MrGlass - de nuevo, sea específico en su pregunta. No seas malicioso, sé amable! – Kev

1

Suponiendo que se trata de una sola clase por elemento:

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

y luego llamar a llamarlo simplemente con

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

Considere usar 'document.getElementsByClassName' en lugar de unir el selector – shea

14

Última respuesta, pero descubrí que esta es la solución más simple (si no lo hace usar jQuery):

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

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

Demo

+0

tiene un pequeño error en el código: al final de las primeras 2 líneas de código debe tener"; " no ",". Con eso arreglado, el código corre perfecto –

+0

No es un error, @alexalex. Declaro las variables separadas por comas. Ver http: // stackoverflow.com/questions/11076750/what-does-variable-declaration-with-multiple-comma-separated-values-mean-egv para más información – HoffZ

+1

gracias por señalarme eso y lo siento por el primer comentario verificado no satisfactorio, traté de ayuda nada más :) - He terminado aprendiendo algo nuevo :) –

Cuestiones relacionadas