简体   繁体   English

jQuery,随机div顺序

[英]jQuery, random div order

I have this jQuery and HTML http://jsfiddle.net/UgX3u/30/ 我有这个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});
});

I am trying to randomise the order, so the div.container div is in any random position, meaning not the same position it started. 我试图随机化顺序,所以div.container div处于任意位置,意味着它的起始位置不同。 and the div must remain within the div.container div必须保留在div.container

I have tried http://jsfiddle.net/UgX3u/32/ http://jsfiddle.net/UgX3u/20/ and more functions I found on the net but non are working 我已经尝试了http://jsfiddle.net/UgX3u/32/ http://jsfiddle.net/UgX3u/20/以及我在网上找到的更多功能但非工作正常

​how can I get the div's to display in a random order 如何让div以随机顺序显示

Try this: 试试这个:

http://jsfiddle.net/UgX3u/33/ 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 is applied to jQuery like this: .sort应用于jQuery,如下所示:

$.fn.sort = [].sort

Since it doesn't perform like other jQuery methods, it isn't documented. 由于它不像其他jQuery方法那样执行,因此没有记录。 That does mean it is subject to change, however I doubt it will ever change. 这确实意味着它可能会发生变化,但我怀疑它会不会改变。 To avoid using the undocumented method, you could do it like this: 为避免使用未记录的方法,您可以这样做:

http://jsfiddle.net/UgX3u/37/ 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() );
});
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;
};

Shuffle function found here 这里找到随机播放功能

Updated: jsFiddle 更新: jsFiddle

This example assumes you have to work with elements already on a page with classes assigned to them: 此示例假定您必须使用已分配给它们的类的页面上已有的元素:

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/ http://jsfiddle.net/UgX3u/40/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM