jQuery选择具有相同类的随机元素

我有类“selectElement”的元素。 当我点击该类的元素时,我“选择”它,并给它另一个类“selectedElements”,如果它还没有它。

但是,我有一个按钮,应该随机选择一些带有“selectElement”类的元素(例如10个)并给它们“selectedElement”类。

我在这个答案中尝试了类似的东西 – > 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"); } }); 

每当你想从X中随机选择N个元素时,解决方案就是Fisher-Yates 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; } 

给定shuffle,然后你可以随机选择X元素

 var items = shuffle($(".selectElement")).slice(0, X); 

这是一个可以玩的小提琴

脚注:因为你只对一定数量的随机选择感兴趣,所以没有必要无条件地将整个输入数组shuffle ,就像上面的shuffle一样; 你可以只.slice一小部分,然后使用.slice切断它并使用它。 我把它作为一种练习; 小心不要错误地抓住* un * shuffled部分!

像这样的东西可以工作(通过点击一个元素触发它)

 $(".selectElement").on("click", function() { var randomElements = $(".selectElement").get().sort(function() { return Math.round(Math.random()) - 0.5; }).slice(0, 5); $(randomElements).css('border', '1px solid red'); });​ 

http://jsfiddle.net/rKFfm/

您可以使用jquery方法eq()按类名选择随机项

看下面的例子。

 var len = $(".someClass").length; var random = Math.floor( Math.random() * len ) + 1; $(".someClass").eq(random).css("background-color", "yellow");