2015-12-16 56 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; 
});