2012-10-10 65 views
5

此循環(請參閱jsfiddle)嘗試向容器追加一個<span>標記五次。但它只做了一次。爲什麼?爲什麼只附加一次?

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

不知道爲什麼,但如果你改變線路2'VAR跨度= 「 SPAN」 它的工作原理;'。 – nickdos

+0

有趣的是,我在我的(比這個演示覆雜得多)代碼上測試了這個,上面評論中的建議工作。例如附加一個字符串,而不是一個jQuery對象。追加一個字符串與jQuery對象有什麼不利之處,還是不好的做法? – brentonstrine

+0

在這種情況下,我會使用一個字符串。 jQuery對象適用於以編程方式(通過多行代碼)構建複雜的dom元素,或者您已經使用jQuery從頁面獲取dom元素。 – nickdos

回答

7

問題是你多次追加相同的元素。
使用clone來克隆該元素,然後使用append

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

demo

更新

這樣你可以定製你的元素,然後用所有屬性克隆。

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評論。

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

+1

甚至更​​簡單'$('。contains')。append('');'和$ span var – Fresheyeball

+0

@Fresheyeball我同意在這種情況下,但是這樣他可以自定義'$ span'並附加它相同的風格多次。 –

+0

@RicardoLohmann是不可能的,如果附加一個字符串?我不能''.append('')'? – brentonstrine