2012-10-10 23 views
5

Este bucle (consulte jsfiddle) intenta agregar una etiqueta <span> a un contenedor cinco veces. Pero solo lo hace una vez. ¿Por qué?¿Por qué solo se agrega una vez?

var myArr = [0,1,2,3,4]; 
var $span= $('<span></span>'); 
for (var i = 0; i < (myArr.length); i++) { 
    $('.contain').append($span); 
} 
+0

No sé por qué pero funciona si cambia la línea 2 a 'lapso var = " SPAN"; '. – nickdos

+0

Interesante, probé esto en mi código (mucho más complicado que este demo), y la sugerencia en el comentario anterior funciona. p.ej. agregar una cadena en lugar de un objeto jQuery. ¿Hay alguna desventaja al agregar una cadena frente a un objeto jQuery o es una mala práctica? – brentonstrine

+0

Usaría una cadena en este caso. El objeto jQuery es útil para construir un elemento dom complejo de forma programática (en muchas líneas de código) o si ya usaste jQuery para obtener un elemento dom de la página. – nickdos

Respuesta

7

El problema es que está agregando el mismo elemento varias veces.
Utilice clone para clonar el elemento y luego append.

$('.contain').append($span.clone());

demo

actualización:

esta manera usted puede personalizar su elemento y luego clonarlo con todas las propiedades.

var $span = $('<span/>', { 
        'class': 'someClass otherClass', 
        'css': { 
         'background-color': '#FF0000' 
        } 
      }); 
for (var i = 0; i < (myArr.length); i++) { 
    $('.contain').append($span.clone()); 
} 

demo2

Update2: según this comentario.

$('.contain').append('<span class="yourClass"/>');

+1

o aún más simple '$ ('. Contain'). Append ('');' y no $ span var – Fresheyeball

+0

@Fresheyeball Estoy de acuerdo en este caso, pero de esta manera puede personalizar el '$ span' y anexarlo el mismo estilo varias veces. –

+0

@RicardoLohmann ¿eso no es posible si se anexa una cuerda? ¿No podría hacer '.append ('')'? – brentonstrine

Cuestiones relacionadas