2012-10-10 41 views
5

Bu döngü (bkz. jsfiddle), bir kapsayıcıya beş kez <span> etiketini eklemeyi dener. Ama sadece bir kez yapar. Niye ya?Neden bu sadece bir kez ekleniyor?

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

emin niçin ama var yayılma = " SPAN" 'hattı 2 değiştirirseniz çalışır;'. – nickdos

+0

İlginç, Bunu (bu demodan çok daha karmaşık) kodumda test ettim ve yukarıdaki yorumdaki öneri işe yarıyor. Örneğin. jQuery nesnesi yerine bir dize ekleyin. Bir dize veya jQuery nesnesine ekleme yapmak için herhangi bir dezavantaj var mı, yoksa kötü bir uygulama mı? – brentonstrine

+0

Bu durumda bir dize kullanırdım. jQuery nesnesi, karmaşık bir dom öğesini programlı olarak oluştururken (kodun birçok satırı üzerinde) veya jQuery'yi zaten sayfadan bir dom öğesi almak için kullandığınız zaman için iyidir. – nickdos

cevap

7

Sorun, aynı öğeyi birden çok kez eklediğinizdir.
Öğe ve daha sonra append klonlamak için clone kullanın. $('.contain').append($span.clone());


demo

Güncelleme: Eğer eleman özelleştirmek ve daha sonra tüm özellikleri ile bunu kopyalayabilirsiniz

Bu şekilde.

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

demo2

Update2: this comment göre.

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

+1

ya da daha basittir '$ ('. Içerir '). Append (' '); ve $ span var – Fresheyeball

+0

@Fresheyeball Bu durumda aynı fikirdeyim, ancak bu şekilde $ span'u özelleştirebilir ve Aynı stilde birden çok kez. –

+0

@RicardoLohmann, bir dize eklendiyse bu mümkün değil mi? Yapamazdım .append ('') '? – brentonstrine