在Javascript列表中随机播放单词

时间:2013-12-21 20:06:11

标签: javascript jquery html css

我做了以下小提琴,其中一个列表中的单词可以拖放到另一个列表中,反之亦然。

Fiddle

拖放代码非常简单。

function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("Text", ev.target.id);
}

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}

并且每个单词都有draggable="true"

虽然两个div都有ondrop="drop(event)" ondragover="allowDrop(event)"

现在,我需要一个函数来重排每个列表中的单词。

基本上,单击一个按钮时,它应调用一个函数,该函数将随机播放列表中的单词。老实说,我不知道如何做到这一点。我在考虑使用Javascript'

var input = a.getElementsByTagName('span')其中,在我的小提琴中,<span>包含每个单独的单词。

与此同时,我想知道它是否与此question相似。如果是的话,有人可以帮我解决当前问题。

感谢。

3 个答案:

答案 0 :(得分:2)

使用真棒underscorejslodash。这些库为javascript提供了实用程序功能,它提供了许多好的功能。

现在要洗牌,这样做:

// your array
myWordArray = [...]
$('.shuffle').click(function {
  myWordArray = _.shuffle(myWordArray);
}

答案 1 :(得分:2)

使用以下shuffle功能:How can I shuffle an array?

function shuffle(o){ 
    for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
}

使用jQuery的示例:

http://jsfiddle.net/trevordowdle/E4qzS/11/

$('#shuffle').click(function(){
    var spanArray = [];
    $('[id^=div]').each(function(){
        spanArray.length = 0;
        $(this).find('span').each(function(){
            spanArray.push($(this));    
        });
        spanArray = shuffle(spanArray);
        $(this).empty();
        for(var i = 0;i<spanArray.length;i++)
            $(this).append(spanArray[i]);    
     });  
});

答案 2 :(得分:1)

如果你想使用简单的JavaScript,你可以这样做:

向HTML添加随机播放按钮:

<button id='btn-shuffle'>SHUFFLE</button>

将这些功能添加到JS:

function shuffleNodes(parent) {
    var nodes = parent.childNodes;
    var arr = [];
    for(var i = 0; i < nodes.length; i++) {
        arr.push(nodes[i]);
    }
    arr.sort(function() {
        return Math.random() < 0.5 ? -1 : 1;
    });
    parent.innerHTML = '';
    for(var j = 0; j < arr.length; j++) {
        parent.appendChild(arr[j]);
    }
}

document.getElementById('btn-shuffle').addEventListener('click', function() {
    shuffleNodes(document.getElementById('div1'));
    shuffleNodes(document.getElementById('div2'));
});

更新了小提琴:http://jsfiddle.net/imcg/9EDzN/