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

Jos*_*osh 39 javascript jquery

如何通过做类似的事情在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();
Run Code Online (Sandbox Code Playgroud)

Anu*_*rag 57

您可以编写自定义过滤器(取自此处):

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;
    }
});
Run Code Online (Sandbox Code Playgroud)

用法示例:

$('.class:random').click()
Run Code Online (Sandbox Code Playgroud)

相同的事情,但作为一个插件代替:

?jQuery.fn.random = function() {
    var randomIndex = Math.floor(Math.random() * this.length);  
    return jQuery(this[randomIndex]);
};
Run Code Online (Sandbox Code Playgroud)

用法示例:

$('.class').random().click()
Run Code Online (Sandbox Code Playgroud)

  • 给我'Uncaught TypeError:无法使用jQuery 1.11.3读取undefined`的属性'length' (2认同)

Mos*_*oss 40

如果您不想硬编码可供选择的元素数量,则可以:

things = $('.class');
$(things[Math.floor(Math.random()*things.length)]).click()
Run Code Online (Sandbox Code Playgroud)


Mar*_*rko 39

var random = Math.floor(Math.random()*10);
$(".someClass").eq(random).click();
Run Code Online (Sandbox Code Playgroud)

  • 使用Math.floor而不是Math.round进行均匀分布.在这种情况下使用Math.round将优先于0到9的1到8. (11认同)
  • 我建议将 `10` 替换为 `$(".someClass").length`。否则,如果链接数量发生变化,这将会中断。 (3认同)
  • 在chrome上弹出:`TypeError:Object#<Object>没有'Round'方法``var random = Math.round(Math.random()*10);` (2认同)

Yi *_*ang 9

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

$('.class').eq(rand).click();
Run Code Online (Sandbox Code Playgroud)

Math.random()得到一个介于0和1之间的伪随机数,所以将它乘以10并向下舍入得到0到9. .eq()是0索引,所以这将得到你所拥有的10个随机jQuery元素.