jQuery随机获取$(selector)返回的一组元素中的一个元素

11

如果 $('.my-element') 匹配了多个元素,有没有一种快速的方法可以从中获取一个随机元素?


是的,你可以像从数组中获取随机值一样获取它。 - Kevin B
3个回答

31
$.fn.random = function() {
  return this.eq(Math.floor(Math.random() * this.length));
}          

$(selector).random();

2
这一个比我的更好。 - DeeDee
1
我注意到了一种奇怪的行为。如果选择器只匹配2个元素,你的答案往往会(我认为)总是返回第一个,因为在floor()上向下取整。这只是我的问题吗? - Dzhuneyt
1
@WordPressDeveloper 因为在这种情况下选择元素的可能性为50%-50%,它可能会多次选择第一个或第二个元素,但它不总是选择一个特定的元素。http://jsfiddle.net/tnaFk/ - Ram

2
为了获得均匀分布,您可以将随机数乘以数组计数,并使用位运算符去除小数部分。
var arr = ['a','b','c'];
arr[~~(Math.random() * arr.length)]; //even odds of a, b, or c

“~~”似乎与“Math.floor()”给出相同的结果。 - xtian
它们的输出相同,但是~~在计算速度方面更快,特别是在旧版浏览器中。这里有一篇比较它们的文章:http://rocha.la/JavaScript-bitwise-operators-in-practice - myrcutio

1
var numElements = $('.my-element').length;
var randomNum = Math.floor(Math.random()*numElements);
//Select your random element
$('.my-element:nth-child(' + randomNum + ')');

2
这样做不完全正确,因为nth-child()选择器是基于1的,而你创建的随机程序是基于0的。人们经常会忽略这一点,因为在编程中很少见到基于1的情况。如果有4个项目,你的程序将永远不会选择第4个项目。 - Volomike

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