2010-09-01 22 views
32

Come posso restituire un elemento casuale in jQuery facendo qualcosa come $(.class).random.click()?Come ottenere un elemento casuale in jquery?

Quindi, se .class avesse 10 collegamenti, farebbe in modo casuale uno di essi.

Ecco quello che ho fatto:

var rand_num = Math.floor(Math.random()*$('.member_name_and_thumb_list a').size()); 
$(".member_name_and_thumb_list a").eq(rand_num).click(); 
+0

si poteva prendere tutti gli elementi con un selettore jQuery regolare, $ ('. Class'), allora invece di iterazione attraverso di loro utilizzando .each, basta afferrare uno casuale. oppure potresti creare una matrice di tutte le classi, quindi generare un indice casuale (basato sull'intervallo dell'array). quindi vai $ ('. randomclass'). click(). – RPM1984

risposta

33
var random = Math.floor(Math.random()*10); 
$(".someClass").eq(random).click(); 
+2

Su chrome appare: 'TypeError: Object # non ha metodo 'Round'' è' var random = Math.round (Math.random() * 10); ' – Mike

+10

Usa Math.floor invece di Math.round per una distribuzione uniforme. L'uso di Math.round in questo caso favorirà da 1 a 8 su 0 e 9. – tremby

9
var rand = Math.floor(Math.random()*10); 

$('.class').eq(rand).click(); 

Math.random() si ottiene un numero pseudo-casuale compreso tra 0 e 1, quindi moltiplicandolo per 10 e arrotondamento verso il basso si ottiene da 0 a 9. .eq() è 0 indicizzato, quindi questo ti porterà un elemento jQuery casuale rispetto al 10 che hai.

+0

Le grandi menti pensano allo stesso modo? – Marko

+0

@Marko Apparentemente, sì;) –

52

È possibile scrivere un filtro personalizzato (taken from here): utilizzo

jQuery.jQueryRandom = 0; 
jQuery.extend(jQuery.expr[":"], { 
    random: function(a, i, m, r) { 
     if (i == 0) { 
      jQuery.jQueryRandom = Math.floor(Math.random() * r.length); 
     }; 
     return i == jQuery.jQueryRandom; 
    } 
}); 

Esempio:

$('.class:random').click() 

La stessa cosa, ma come un plugin invece:

​jQuery.fn.random = function() { 
    var randomIndex = Math.floor(Math.random() * this.length); 
    return jQuery(this[randomIndex]); 
}; 

Esempio di utilizzo:

$('.class').random().click() 
+2

+1 per l'estensione del filtro. – prodigitalson

+0

mi restituisce 'Uncaught TypeError: Impossibile leggere la proprietà 'length' of undefined' con jQuery 1.11.3 – cwd

35

Se non si desidera codificare il numero di elementi tra cui scegliere, questo funziona:

things = $('.class'); 
$(things[Math.floor(Math.random()*things.length)]).click() 
+1

Questa è un'ottima risposta ... efficiente e autonoma con nient'altro che un singolo selettore. –

+0

È la seconda volta che vengo qui. Perché non possiamo alzare di più? –

2

Io suggerirei di farlo nel modo jQuery utilizzando .eq() e .trigger().

$elements.eq(Math.floor(Math.random() * $elements.length)).trigger('click'); 
0

È possibile selezionare elemento casuale per nome classe utilizzando il metodo di jQuery eq()

vedi disegno qui sotto.

var len = $(".class").length 
var random = Math.floor(Math.random() * len) + 1; 
$(".class").eq(random).click(); 
Problemi correlati