1

要素をシャッフルする方法に少し不満があります (要素にデータが保存されているため、テキストを変更するだけでは十分ではありません)。兄弟要素をシャッフルしようとしているので、.before と .after を使用する必要があります。これは私の現在のコードです

function shuffle() {
    var children = $("#paren").children();
    randIndex = randomFromTo(0, arr.length - 1);

    for(i = 0; i < children.length; i++) {
        //But obviously I can't retrieve a specific child like this
        $("#parent nth-child("+randIndex+")").before(children.i);
    }
}
function randomFromTo(from, to){
    return Math.floor(Math.random() * (to - from + 1) + from);
}
4

2 に答える 2

0

子を配列として取得し、シャッフルして再度追加します。それらは同じ参照であるため、追加すると実際に移動します。

var parent = $('ul');

var children = parent.children().get().sort(function() {
    return Math.random() - 0.5;
});

parent.append(children);

https://tinker.io/54968

于 2012-10-06T16:10:34.780 に答える
0

要素の配列を作成し、配列をシャッフルしてから、要素を再追加します。

function shuffle(parent) {
    var container = document.getElementById(parent),
        children = container.children,
        length = children.length, i,
        tmparr = [];
    for( i=0; i<length; i++) tmparr[i] = children[i];
    tmparr.sort(function() {return 0.5-Math.random();});
    for( i=0; i<length; i++) container.appendChild(tmparr[i]);
}

jQueryが完全に存在しないことに注意してください。shuffle("paren")また、単一目的の関数ではなく、で呼び出すことができるように、関数をパラメーター化しました。

于 2012-10-06T16:11:32.527 に答える