2012-02-24 21 views
13

ho questo jQuery e HTML http://jsfiddle.net/UgX3u/30/jQuery, ordine casuale div

<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}); 
}); 

Sto cercando di randomizzare l'ordine, in modo che il div.container div è in ogni posizione casuale, cioè non è la stessa posizione che ha iniziato. e il div deve rimanere all'interno del div.container

ho cercato http://jsfiddle.net/UgX3u/32/ http://jsfiddle.net/UgX3u/20/ e più funzioni che ho trovato in rete, ma non stanno lavorando

come posso ottenere i div da visualizzare in ordine casuale

+1

E * sembra * funzionare bene, una volta che l'errore di battitura del fisso (si doveva '.addCass' invece di' .addClass'): [Aggiornamento JS Fiddle] (http://jsfiddle.net/davidThomas/UgX3u/35/). –

+0

+1 scusate per essere un nonce :(. –

+2

Assolutamente! Perché ho * mai * fatto questo! ... non mai ... * corre * =) –

risposta

13

Prova questo:

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 è applicato jQuery simili:

$.fn.sort = [].sort 

Poiché non esegue come altri metodi di jQuery, non è documentato. Ciò significa che è soggetto a modifiche, tuttavia dubito che cambierà mai. Per evitare di utilizzare il metodo non documentato, si potrebbe fare così:

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()); 
}); 
+0

A partire da oggi (settembre 2013) questo non lo fa lavoro più. Non ho un errore jQuery, semplicemente non funziona :-(dbl ha controllato il codice.Ho provato qui www.stupidwebtools.com D'altra parte la funzione 'shuffle (o)' funziona alla grande – Fabrizio

+0

Bene, funziona ancora nel violino, anche quando scelgo l'ultima versione di jquery, la maggior parte del lavoro viene eseguita dai metodi nativi di javascript, quindi non c'è alcun motivo per cui smetta di funzionare. –

+0

sì, funziona in jq 2.0. 2. nice: http://jsfiddle.net/UgX3u/312/ – Ben

6
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; 
}; 

funzione di riproduzione casuale trovato here

Aggiornato: jsFiddle

0

Questo esempio presuppone devi lavorare con elementi già su un pa ge con le classi a loro assegnati:

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/

+0

questo è un ottimo punto questo è eccellente @Kai grazie! –

+0

sei il benvenuto :) – Kai