如何在jQuery中获取随机元素?

45

如何使用jQuery实现类似于$(.class).random.click()这样的随机返回元素功能?

比如,如果.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();

你可以使用 jQuery 的正则选择器 $('.class') 抓取所有元素,然后不必使用 .each 迭代它们,只需随机抓取一个即可。或者你可以创建一个包含所有类的数组,然后生成一个基于该数组范围的随机索引。然后执行 $('.randomclass').click()。 - RPM1984
自从jQuery 1.8版本以后,我们应该使用length而不是size。 - Developer
7个回答

62

你可以编写一个自定义过滤器(来自此处):

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()

3
在使用 jQuery 1.11.3 版本时,出现了 Uncaught TypeError: Cannot read property 'length' of undefined 错误。 - cwd

46

如果您不想硬编码要选择的元素数量,可以使用以下方法:

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

1
这是一个很棒的答案...仅通过一个单一的选择器就能高效且独立地完成。 - Robert Waddell
这是我第二次来到这里。为什么我们不能投更多赞? - Taha Paksu

42
var n_elements = $(".someClass").length;
var random = Math.floor(Math.random()*n_elements);
$(".someClass").eq(random).click();

2
在 Chrome 上出现以下弹出窗口:TypeError: Object #<Object> has no method 'Round',代码为var random = Math.round(Math.random()*10); - Mike
11
在这种情况下,使用Math.floor而不是Math.round可以获得更均匀的分布。在这种情况下使用Math.round会偏向于1到8而不是0和9。 - tremby
3
我建议用 $(".someClass").length 替换 10。否则,如果链接数量发生变化,代码将会出错。 - Rapti

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

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

Math.random()可以获得一个介于0和1之间的伪随机数,因此将其乘以10并向下取整可获得0到9之间的数字。.eq()从0开始计数索引,因此这将从你拥有的10个jQuery元素中获取一个随机元素。


2
我建议使用jQuery的方式,使用.eq()和.trigger()方法。
$elements.eq(Math.floor(Math.random() * $elements.length)).trigger('click');

1
你可以使用jQuery方法eq()按类名选择随机项。
请参见下面的示例。
var len = $(".class").length
var random = Math.floor( Math.random() * len ) + 1;
$(".class").eq(random).click();

0

randojs.com让这变成了一个简单的一行代码:

rando($("a")).value[0].click()

".value" 是因为您还可以选择获取随机 jQuery 元素的索引。"[0]" 在此处是将 jQuery 元素转换为普通 JavaScript 元素。如果您将以下内容添加到 html 文档的头部,您几乎可以轻松地使用任意随机性。从数组中获取随机值、随机 jquery 元素、从对象中获取随机属性,甚至在需要时防止重复。
<script src="https://randojs.com/1.0.0.js"></script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接