select5个随机元素

我怎样才能select前5个随机元素

<ul> <li>First</li> <li>Second</li> <li>Third</li> ... <li>N</li> </ul> 

我正在使用这个插件 :

 alert($("li:random").text()); 

但它需要所有的随机元素。 我只想要第一个5。

有没有另一种方法来做同样的事情?

以下是如何从jQueryselect中获得5个随机元素,无需插件!

 randomElements = jQuery("li").get().sort(function(){ return Math.round(Math.random())-0.5 }).slice(0,5) 

此时,您有5个DomElement从jQuery返回的所有LI中随机select

然后,你可以做任何你喜欢的事情,
例如改变他们的颜色:

 $(randomElements).css("color","red") 

或显示其合并的文本内容:

 $(randomElements).text() 

使用Fisher-Yates shuffle,我为此创build了一个小脚本。 这是通过首先创buildjQuery元素数组的随机混合和切片副本,然后过滤掉两个数组中不存在的所有元素来完成的。

你可以在http://www.afekenholm.se/jquery-rand阅读。; 这是脚本:

 /** * jQuery.rand v1.0 * * Randomly filters any number of elements from a jQuery set. * * MIT License: @link http://www.afekenholm.se/license.txt * * @author: Alexander Wallin (http://www.afekenholm.se) * @version: 1.0 * @url: http://www.afekenholm.se/jquery-rand */ (function($){ $.fn.rand = function(k){ var b = this, n = b.size(), k = k ? parseInt(k) : 1; // Special cases if (k > n) return b.pushStack(b); else if (k == 1) return b.filter(":eq(" + Math.floor(Math.random()*n) + ")"); // Create a randomized copy of the set of elements, // using Fisher-Yates sorting r = b.get(); for (var i = 0; i < n - 1; i++) { var swap = Math.floor(Math.random() * (n - i)) + i; r[swap] = r.splice(i, 1, r[swap])[0]; } r = r.slice(0, k); // Finally, filter jQuery stack return b.filter(function(i){ return $.inArray(b.get(i), r) > -1; }); }; })(jQuery); 

获得一个随机数字索引,1-5,并获得与该索引ul的孩子。 像这样:

 var index = Math.floor(Math.random() * 5) + 1; // nth-child indices start at 1 alert($("ul:nth-child(" + index + ")").text()); 
  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; } }); 
 $("li:lt(5):random").text() 

为什么不这样做,这似乎很有效率:

 jQuery('li:random').slice(0, 5);