我有“selectElement”类的元素。当我单击具有该类的元素时,我“选择”它,并给它另一个类“selectedElements”(如果它还没有)。
但是,我有一个按钮,应该随机选择一定数量(例如 10)的“selectElement”类元素,并给它们“selectedElement”类。
我尝试了类似这个答案的东西->https://stackoverflow.com/a/1764629/1011539 https://stackoverflow.com/a/1764629/1011539,但每次都会返回相同的值......
编辑:在乔恩的帮助下解决了。这是其他有类似问题的用户的代码:)
$("#chooseElementsRand").live("click",function(){
$(".selectedElements").removeClass("selectedElements");
var maxNum = parseInt($(".maxNum").html());
var randomElements = shuffle($(".selectElement")).slice(0,maxNum).addClass("selectedElements");
$(".selectedNum").html(randomElements.length);
if(randomElements.length==maxNum) {
$(".buttonToProceed").removeClass("notShown");
}
});
每当你想选择 N 个元素时really从 X 中随机选择,解为费舍尔-耶茨洗牌 http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle. 这一页 http://bost.ocks.org/mike/shuffle/有一个 Javascript 实现(加上基本原理,加上漂亮的动画,所以去看看):
function shuffle(array) {
var m = array.length, t, i;
// While there remain elements to shuffle…
while (m) {
// Pick a remaining element…
i = Math.floor(Math.random() * m--);
// And swap it with the current element.
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
}
考虑到随机播放,您可以随机选择 X 个元素
var items = shuffle($(".selectElement")).slice(0, X);
这是一个工作小提琴 http://jsfiddle.net/fK8Xw/和玩。
脚注:由于您只对一定数量的随机选择感兴趣,因此无需无条件地对整个输入数组进行洗牌shuffle
执行上述操作;你可以只洗牌一小部分然后使用.slice
切断它并使用它。我将把这个作为练习;小心不要错误地抓住*未*洗牌的部分!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)