2013-07-25 129 views
3

我想知道是否有办法让jQuery在ul标签内随机选择一个li选择一个随机li元素 - jQuery

例子:

<ul> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>4</li> 
</ul> 

因此,这里会发生什么,让我们有一个click事件,$("ul li:last").trigger('click');但要注意它如何:last,我怎么可以指定是否选择第二,第三,甚至第四个li随机基于树。

UPDATE:

我注意到其他使用数学,如果我有一个是由MySQL填充的ul li名单,我不知道有多少li会有提示。

回答

8

使用

Math.floor((Math.random() * $('ul li').length) + 1); 

这给了你和1之间的数字的li数,然后使用:nth-child()选择。

您可以了解更多有关here

+0

我喜欢这个答案比另一个更好,因为它通过计算li标签的数量自动确定乘数。 –

+0

想不出我只是分配一个值什么Math.floor等于?因为我们面对的是指数 –

+0

不要加1。 – marteljn

5
$("ul li:eq(" + Math.floor(Math.random()*4) + ")").trigger('click'); 

您可以使用Math.random

随机函数由4选择0和1复接它之间的数字和向下取整会给你0和3每次之间的数字。

编辑

如建议在对方的回答很可能是使用length属性代表遗失物品的数量而不是硬编码4个好主意,但因为你想开始不要加1 0因为我们正在处理指数。

+0

检查我更新我只是做了。 –

+0

这是有效的,但只要锂标签的数量发生变化,就会因为4是硬编码而中断。 –

+0

@DavidBiga你不需要知道,因为你可以使用jQuery作为对方的回答表明它被渲染后得到'length'。 – marteljn

8

这里是一个扩展功能

$.fn.random = function() 
{ 
    var ret = $(); 

    if(this.length > 0) 
     ret = ret.add(this[Math.floor((Math.random() * this.length))]); 

    return ret; 
}; 

这是你将如何使用它

$("ul li").random().trigger("click"); 
+1

这个比接受的答案更优雅。 – ecc

2

这里是另一种解决方案:

var list = $('ul li'); 
list.eq(parseInt(Math.random()*list.length)).trigger('click');