2015-12-16 60 views
4

我對編碼完全陌生,所以如果我的問題很蠢,請耐心等待(&請將任何答案寫出來作爲代碼,否則我將無法得到它......)。我正在開發Qualitative調查頁面,其中有兩個可選答案 - 每個答案都是一個項目列表。我正在嘗試對列表進行洗牌,以便每個參與者以不同的順序查看它們。我從網上獲得了以下代碼。只能做HTML列表一次洗牌

我的HTML列表如下所示:

<div id="enriched"> 
    <div class="list_item">lots of sunshine</div> 
    <div class="list_item">gorgeous beaches and coral reefs</div> 
    <div class="list_item">ultra-modern hotel</div> 
    <div class="list_item">very cold water</div> 
    <div class="list_item">very strong winds</div> 
    <div class="list_item">no nightlife</div> 
</div> 

而我的JavaScript代碼是這樣的:

var list = document.getElementById("enriched"); 
function shuffleNodes() { 
    var nodes = list.children, i = 0; 
    nodes = Array.prototype.sort.call(nodes); 
    while(i < nodes.length) { 
     list.appendChild(nodes[i]); 
     ++i; 
    } 
} 
shuffleNodes(); 

但是,只從原始版本洗牌列表一次。之後,每個下一個參與者都會看到該版本,而沒有進一步的洗牌發生。之後,我需要以某種方式使它適用於這兩個列表..我有點強調。

我也嘗試了一個數組代碼,但我無法讓它工作。

+3

你不能在你的代碼洗牌節點的任何地方 - 你對它們進行排序在一些特定的順序放置。對它們進行一次排序只是將它們按照相同的順序放置,所以在第一次排序後您不會看到任何更改。 –

+0

http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array – shareef

回答

0

正如函數名稱暗示的那樣,行nodes = Array.prototype.sort.call(nodes);不會對內容進行隨機排序 - 它對它進行排序。所以你每次都得到一致的順序。

您可能想看看How to randomize (shuffle) a JavaScript array?的洗牌實施。

0

這應該創建一個新random_list陣列:

var random_list = []; 

for (i = 0; i < nodes.length; i ++) { 
    random_list.push(nodes[i].innerHTML); 
} 

random_list.sort(function() { 
    return Math.random() - 0.5; 
});