2013-07-25 128 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');