Подтвердить что ты не робот

JQuery, случайный порядок

У меня есть этот jQuery и HTML http://jsfiddle.net/UgX3u/30/

    <div class="container">
    <div class="yellow"></div>
    <div class="red"></div>
    <div class="green"></div>
    <div class="blue"></div>
    <div class="pink"></div>
    <div class="orange"></div>
    <div class="black"></div>
    <div class="white"></div>
    </div>​
$("div.container div").each(function(){
    var color = $(this).attr("class");
    $(this).css({backgroundColor: color});
});

Я пытаюсь рандомизировать порядок, поэтому div.container div находится в любой случайной позиции, что означает не ту же самую начальную позицию. и div должен оставаться в пределах div.container

Я пробовал http://jsfiddle.net/UgX3u/32/ http://jsfiddle.net/UgX3u/20/ и больше функций, которые я нашел в сети, но не работают

как я могу получить div для отображения в случайном порядке

4b9b3361

Ответ 1

Попробуйте следующее:

http://jsfiddle.net/UgX3u/33/

$("div.container div").sort(function(){
    return Math.random()*10 > 5 ? 1 : -1;
}).each(function(){
    var $t = $(this),
        color = $t.attr("class");
    $t.css({backgroundColor: color}).appendTo( $t.parent() );
});

.sort применяется к jQuery следующим образом:

$.fn.sort = [].sort

Так как он не работает, как другие методы jQuery, он не документируется. Это означает, что оно может измениться, однако я сомневаюсь, что оно когда-либо изменится. Чтобы избежать использования недокументированного метода, вы можете сделать это следующим образом:

http://jsfiddle.net/UgX3u/37/

var collection = $("div.container div").get();
collection.sort(function() {
    return Math.random()*10 > 5 ? 1 : -1;
});
$.each(collection,function(i,el) {
    var color = this.className,
        $el = $(el);
    $el.css({backgroundColor: color}).appendTo( $el.parent() );
});

Ответ 2

var $container = $("div.container");
$container.html(shuffle($container.children().get()));

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

Функция в случайном порядке найдена здесь

Обновлено: jsFiddle

Ответ 3

В этом примере предполагается, что вам нужно работать с элементами уже на странице с присвоенными им классами:

var classes = [];

// Populate classes array
// e.g., ["yellow", "red", "green", "blue", "pink", "orange", "black", "white"]
$('div.container').children().each(function (i, v) {
    classes.push(v.className);
});

// Assign random color to each div
$('div.container').children().each(function (i, v) {
    var color = Math.floor(Math.random()*classes.length)
    $(v).css({backgroundColor: classes.splice(color,1)});
});

http://jsfiddle.net/UgX3u/40/