选择5个随机元素
以下是如何从jQuery选择中获得5个随机元素,无需插件!
randomElements = jQuery("li").get().sort(function(){
return Math.round(Math.random())-0.5
}).slice(0,5)
在这一点上,你有已随机选择从所有LIS是jQuery的返回
那么你可以做任何你与他们喜欢的5个DomElements,
例如改变它们的颜色:
$(randomElements).css("color","red")
或显示它们的组合的文本内容:
$(randomElements).text()
+1,但我很好奇你为什么在文本中拼写“random”的原因一致,并且在代码片段中一直不正确:...) – 2009-11-19 17:00:41
一般想法很好,但不应该洗牌这样的阵列。排序是洗牌数组效率低下的一种方式,而不一致的比较可能会导致问题(甚至可能导致排序无限循环)。最好使用Fisher-Yates shuffle(http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)。 – 2009-11-19 18:07:11
这不会让你成为一个随机排序的数组。这里有一篇关于它的文章(它是Objective-C,但不应该)http://cocoawithlove.com/2010/06/sorting-nsmutablearray-with-random.html – 2010-06-14 09:22:43
得到一个随机数索引,1-5,并取得与该指数上行的孩子。像这样:
var index = Math.floor(Math.random() * 5) + 1; // nth-child indices start at 1
alert($("ul:nth-child(" + index + ")").text());
为什么不做到这一点,似乎很有效:
jQuery('li:random').slice(0, 5);
可能是因为jQuery没有':random'选择器[再]]? – 2012-10-01 19:53:15
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;
}
});
使用我创建了一个小脚本用于此目的的。这是通过首先创建jQuery元素数组的随机混合和切片副本,然后过滤掉两个数组中不存在的所有元素来完成的。
你可以在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);
你可以用一个div周围的前五个服务器端,然后使用 李#先五:随机 ? – Kzqai 2009-11-19 15:39:58
不,我可以使用! – AlexC 2009-11-19 15:49:09
我不知道支持“:random”伪选择器的jQuery,你如何添加这个功能以及它背后的代码逻辑是什么? – duckyflip 2009-11-19 16:10:16