2010-09-01 14 views
32

Jak mogę zwrócić losowy element w jQuery, wykonując coś takiego jak $(.class).random.click()?Jak uzyskać losowy element w jquery?

Tak więc, jeśli .class ma 10 linków, to losowo kliknąłby jeden z nich.

Oto co zrobiłem:

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

można pobrać wszystkie elementy za pomocą zwykłego selektora jquery, $ (". Class"), a następnie zamiast iterować je za pomocą .each, po prostu chwyć losowy. lub możesz utworzyć tablicę wszystkich klas, a następnie wygenerować losowy indeks (w oparciu o zakres tablicy). następnie idź $ (".classclass"). click(). – RPM1984

Odpowiedz

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

Chrome to wyskakuje: 'TypeError: Object # ma metodę„Round'' to jest 'var random = Math.round (Math.random() * 10);' – Mike

+10

Wykorzystanie Math.floor zamiast Math.round dla równomiernej dystrybucji. Korzystanie z Math.round w tym przypadku będzie faworyzować od 1 do 8 powyżej 0 i 9. – tremby

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

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

Math.random() dostaje szereg pseudolosowych między 0 a 1, więc mnożąc ją przez 10 i zaokrąglając ją dostaje 0 do 9. .eq() jest 0 zindeksowane, więc dostaniesz losowy element jQuery z 10, które masz.

+0

Wielkie umysły myślą podobnie? – Marko

+0

@Marko Najwyraźniej tak;) –

52

Możesz napisać własny filtr (taken from here):

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

Przykład użycia:

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

to samo, ale jako plugin Zamiast:

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

Przykładowe użycie:

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

+1 dla rozszerzenia filtra. – prodigitalson

+0

daje mi 'Uncaught TypeError: Nie można odczytać właściwości 'length' of undefined' z jQuery 1.11.3 – cwd

35

Jeśli nie chcą ciężko kodem liczba elementów do wyboru, to działa:

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

To jest świetna odpowiedź ... wydajna i samodzielna z niczym więcej niż jednym selektorem. –

+0

Po raz drugi tu przyjeżdżam. Dlaczego nie możemy więcej przegłosować? –

2

Sugerowałbym robi to tak jQuery używając .eq() i .trigger().

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

Można wybrać losowy przedmiot o nazwie klasy, stosując metodę jquery eq()

patrz przykład poniżej.

var len = $(".class").length 
var random = Math.floor(Math.random() * len) + 1; 
$(".class").eq(random).click(); 
Powiązane problemy