2010-08-18 12 views
7

Tengo este código en una función y quiero acortarlo: aplica el mismo estilo a cada elemento de una matriz.forma abreviada de Javascript para duplicar cadenas

document.getElementById(divsArray[0]).style.visibility = 'hidden'; 
document.getElementById(divsArray[1]).style.visibility = 'hidden'; 
document.getElementById(divsArray[2]).style.visibility = 'hidden'; 
document.getElementById(divsArray[3]).style.visibility = 'hidden'; 

respuesta NO a fecha de trabajo (Porque estoy bucle a través del código ??)

resolvió estableciendo solamente la visibilidad diapositiva mostrada previamente oculta

x = i; 
i = i+1; 

document.getElementById(divsArray[x]).style.visibility = 'hidden'; 
+1

¡Santo voto abajo, Batman! –

+0

todos están copiando la misma respuesta en esta pregunta –

+0

@Amr: si están copiando o no, no está claro (es una respuesta obvia, por lo que probablemente no) pero tampoco agregan nada y por lo tanto deberían haberse eliminado. – Shog9

Respuesta

8

Cómo sobre el uso de una bucle:

for (var i = 0; i < 4; i++) { 
    document.getElementById(divsArray[i]).style.visibility = 'hidden'; 
} 
+1

¿Alguna razón para el downvote? Por favor, deje un comentario cuando downvoting una respuesta. –

+0

¡Primero pasó la publicación hoy! - Gracias – Rhys

2
for (i=0;i<4;i++) { 
    document.getElementById(divsArray[i]).style.visibility='hidden'; 
} 
+2

Es un buen estilo para declarar su variable de índice * en algún lugar * (aunque no necesariamente en la instrucción for(), ya que eso no crea el alcance de todos modos) para evitar problemas con los globales. Pero Darin te golpeó al golpe esta vez ... ;-) – Shog9

+0

"Golpeado al golpe" por los 4 segundos (de acuerdo con lo que vi cuando la página se recargó).No me molesté en eliminarlo porque pensé que reforzaba el punto de que era la manera de hacerlo. – gabe3886

5

sólo para proporcionar algo diferente, una solución de jQuery:

$(divsArray).each(function() { 
    $(this).css("visibility", "hidden"); 
}); 

Editar: Parece que usted podría tener que recoger sus referencias DOM primero. (DivsArray es en realidad una serie de nombres div, y no los propios divs?)

$(divsArray).each(function() { 
    $("#" + this).css({ "visibility": "hidden" }); 
}); 
+3

Amigo, estás pidiendo problemas con esa respuesta. ¡Esta es una multitud difícil! :) Mira los comentarios. :) –

+0

@D Hoerster - ja, ja, no te equivocas. ¡Estaba a punto de añadir un comentario y el botón se eliminó en el medio! :) –

+0

si 'divsArray' es todas las cadenas de id, debe ser' $ ('#' + this) .css ("visibility", "hidden"); '¿verdad? – lincolnk

4

Me suena que podría haber más divs ... ¿Puedo sugerir que este cambio de código de Darin:

for (var i = 0; i < divsArray.length; i++) { 
    document.getElementById(divsArray[i]).style.visibility = 'hidden'; 
} 
+0

Buen punto en conseguir el divsArray.length –

+0

me gusta esto en principio, sin embargo, estrictamente hablando, no es necesariamente un reemplazo de lo que escribió el OP. – Shog9

+1

No usaría 'divsArray.length' a menos que el OP explícitamente diga que quiere usar todos los elementos en la matriz. ¿Qué pasa si solo quiere los primeros cuatro elementos? Pero es un buen punto de todos modos. –

4

y aquí es como funciona tanto en Prototype y Mootools:

$(divsArray).each(function(item) { 
    $(item).setStyle({visibility: "hidden"}); 
}); 
+1

¿por qué el voto a favor? No veo dónde está duplicado ... –

4

se puede retener la siguiente función en el mismo alcance/descendiente de divsArray.

function baka(idx) { 
    document.getElementById(divsArray[idx]).style.visibility = 'hidden'; 
} 

A continuación, puede hacer cualquiera

baka(0); 
baka(1); 
baka(2); 
baka(3); 

o

for (var i = 0; i < 4; i++) 
    baka(i); 

Parece sin sentido, pero si usted tiene más matrices así, es posible que desee modificar su función como esta:

function aho(arr, idx) { 
    document.getElementById(arr[idx]).style.visibility = 'hidden'; 
} 

y lazo a través de cualquier matriz como esta:

for (var i = 0; i < divsArray.length; i++) 
    aho(divsArray, i); 

Y no, no hay macros ni hay plantillas.

+0

Muy creativo, +1 para proporcionar una respuesta interesante. – sworoc

1

, siempre y cuando todos estamos acumulando en adelante, voy a tomar el enfoque más directo: D

document.getElementById(divsArray[0]).style.visibility = 
document.getElementById(divsArray[1]).style.visibility = 
document.getElementById(divsArray[2]).style.visibility = 
document.getElementById(divsArray[3]).style.visibility = 'hidden'; 

y justo para ir contra la corriente:

var d = null, i = 0; 
while (d = document.getElementById(divsArray[i++])) { 
    d.style.visibility = 'hidden'; 
} 
1

no pude "resistir" al desafío.Yo diría que se agregan a la misma clase y hacer algo como (ejemplo Prototipo):

$$('.className').invoke('setStyle', { 'visibility' : 'hidden' }); 
+0

1 para invocar, no había pensado en eso, pero aparte de que está haciendo suposiciones (tal vez no es una clase css común o tal vez hay y también es utilizado por otros componentes). Por lo tanto, primero debe encontrar la forma de convertir una matriz de identificadores en un mapa de elementos. Mi suposición sería arrayOfIds.map ($). Invoke() pero no estoy seguro. –

0

Nos puede iterar sobre una matriz que contiene id s utilizando Array.prototype.forEach() y Arrow Functions de ES6:

var elemIds = ['two', 'four', 'six']; 
 

 
elemIds.forEach(id => {document.getElementById(id).style.visibility = 'hidden';});
<div id="one">One</div> 
 
<div id="two">Two</div> 
 
<div id="three">Three</div> 
 
<div id="four">Four</div> 
 
<div id="five">Five</div> 
 
<div id="six">Six</div> 
 
<div id="seven">Seven</div>

Cuestiones relacionadas