2012-05-22 43 views
0

我有2個divs,#col1#col2,我需要在那裏生成一些水果名稱的div。jquery basic:如何隨機化這個數組並仍然調用所有參數?

到目前爲止,我有:

var fruitArray = ['apples','banana','orange','grapes']; 
for (fruit in fruitArray) { 
    $('<div class="'+fruitArray[fruit]+'"></div>').appendTo('#col1').doSomething(); 

    $('<div id="'+fruitArray[fruit]+'"></div>').appendTo('#col2').doSomething(); 
} 

果然像:

<div id="#col1"> 
    <div class="apples"></div> 
    <div class="banana"></div> 
    <div class="orange"></div> 
    <div class="grapes"></div> 
</div> 
<div id="#col2"> 
    <div id="apples"></div> 
    <div id="banana"></div> 
    <div id="orange"></div> 
    <div id="grapes"></div> 
</div> 

如何隨機排列,所以它看起來是這樣的:

<div id="#col1"> 
    <div class="orange"></div> 
    <div class="apples"></div> 
    <div class="orange"></div> 
    <div class="grapes"></div> 
</div> 
<div id="#col2"> 
    <div id="grapes"></div> 
    <div id="orange"></div> 
    <div id="apples"></div> 
    <div id="banana"></div> 
</div> 
+0

你有2周橙色的div在firstColumn? –

回答

0

簡單shuffle擴展:

Array.prototype.shuffle = function() { 
    var shuffledArray = []; 
    while (this.length) { 
     shuffledArray.push(this.splice(Math.random() * this.length, 1)[0]); 
    } 
    while (shuffledArray.length) { 
     this.push(shuffledArray.pop()); 
    } 
    return this; 
} 

使用它像

var fruitArray = ['apples','banana','orange','grapes'].shuffle(); 
for (var i = 0; i < fruitArray.length; i++) {    
    $('<div class="'+fruitArray[i]+'"></div>').appendTo('#col1').doSomething(); 

    $('<div id="'+fruitArray[i]+'"></div>').appendTo('#col2').doSomething(); 
} 
+0

嗨,這很好,除了我似乎看到我的div後的洗牌功能?任何想法爲什麼? – user1193783

+0

@ user1193783:因爲for(fruit in fruitArray)遍歷對象的**屬性**,而不僅僅是數組元素。既然你擴展了'Array.prototype','shuffle'現在是所有數組的屬性。這就是爲什麼你應該(a)從不使用'for ... in'來遍歷一個數組和(b)避免擴展內建對象的原型。 –

+0

@FelixKling當然你是對的。我編輯了我的示例以使用'for'循環。 – GodLesZ

相關問題