2010-09-01 1 views
32

Как вернуть случайный элемент в jQuery, выполнив что-то вроде $(.class).random.click()?Как получить случайный элемент в jquery?

Итак, если .class было 10 ссылок, это будет случайно нажать на один из них.

Вот что я сделал:

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

вы могли бы захватить все элементы с регулярным селектора JQuery, $ (». Класс), то вместо того, перебирая их с помощью .each, просто захватить случайное одно. или вы можете создать массив всех классов, а затем создать случайный индекс (в зависимости от диапазона массива). затем перейдите в $ ('. randomclass'). click(). – RPM1984

ответ

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

На хром это всплывает: 'TypeError: Object # не имеет метода« Round », это' var random = Math.round (Math.random() * 10); ' – Mike

+10

Использование Math.floor вместо Math.round для равномерного распределения. Использование Math.round в этом случае будет поддерживать от 1 до 8 над 0 и 9. – tremby

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

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

Math.random() получает вас псевдослучайных чисел между 0 и 1, поэтому, умножив его на 10 и округление вниз получает вас 0 до 9. .eq() является 0, поэтому это даст вам случайный элемент jQuery из 10, которые у вас есть.

+0

Великие умы думают одинаково? – Marko

+0

@Marko Видимо, да;) –

52

Вы можете написать собственный фильтр (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; 
    } 
}); 

Пример использования:

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

То же самое, но как плагин вместо:

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

Пример использования:

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

+1 для расширения фильтра. – prodigitalson

+0

дает мне 'Uncaught TypeError: не может прочитать свойство 'length' undefined' с jQuery 1.11.3 – cwd

35

Если вы не хотите жестко закодировать число элементов на выбор, это работает:

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

Это отличный ответ ... эффективный и автономный с не более чем одним селектором. –

+0

Это второй раз, когда я прихожу сюда. Почему мы не можем больше продвигать? –

2

Я предлагаю делать это так, как JQuery, используя .eq() и .trigger().

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

Вы можете выбрать случайный элемент по имени класса с помощью метода JQuery eq()

смотрите пример ниже.

var len = $(".class").length 
var random = Math.floor(Math.random() * len) + 1; 
$(".class").eq(random).click(); 
Смежные вопросы