2010-09-01 41 views
32

¿Cómo puedo devolver un elemento aleatorio en jQuery haciendo algo como $(.class).random.click()?Cómo obtener elementos aleatorios en jquery?

Por lo tanto, si .class tuviera 10 enlaces, haría clic aleatoriamente en uno de ellos.

Esto es lo que hice:

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

se pudiera tomar todos los elementos con un selector de jQuery regular, $ ('. Clase), entonces en vez de iteración a través de ellas usando .Cada, sólo tienes que tomar al azar. o puede crear una matriz de todas las clases, luego generar un índice aleatorio (basado en el rango de la matriz). luego vaya $ ('. randomclass'), haga clic en(). – RPM1984

Respuesta

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

En Chrome aparece: 'TypeError: Object # no tiene método 'Round'' es' var random = Math.round (Math.random() * 10); ' – Mike

+10

Uso Math.floor en lugar de Math.round para una distribución uniforme. El uso de Math.round en este caso favorecerá de 1 a 8 sobre 0 y 9. – tremby

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

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

Math.random() se consigue un número pseudo-aleatorio entre 0 y 1, por lo que multiplicarlo por 10 y redondeando hacia abajo se consigue 0 a 9. .eq() es 0 indexado, por lo que esto le dará un elemento jQuery al azar de los 10 que tiene.

+0

¿Las grandes mentes piensan igual? – Marko

+0

@Marko Al parecer, sí;) –

52

Se puede escribir un filtro personalizado (taken from here): el uso

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

Ejemplo:

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

Lo mismo sino como un plugin en su lugar:

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

Ejemplo de uso:

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

+1 para la extensión del filtro. – prodigitalson

+0

me da 'Unbeught TypeError: No se puede leer la propiedad 'length' de undefined' con jQuery 1.11.3 – cwd

35

Si no desea codificar el número de elementos para elegir, esto funciona:

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

Esta es una gran respuesta ... eficiente e independiente con nada más que un solo selector. –

+0

Es la segunda vez que vengo aquí. ¿Por qué no podemos votar más? –

2

yo sugeriría hacerlo de la manera jQuery usando .eq() y .trigger().

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

Puede seleccionar el elemento de azar por nombre de la clase utilizando el método jQuery eq()

ver el ejemplo abajo.

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