Javascript 给定一个很长的列表,如何随机选择x个元素?

Javascript 给定一个很长的列表,如何随机选择x个元素?,javascript,jquery,random,jquery-selectors,Javascript,Jquery,Random,Jquery Selectors,标记: 在1和列表长度之间选择一个随机数r。 选择el%r==0的所有元素。 完成 我想你可以做这样的事情: something like: var i = 0; $("li:random").each(function(){ i++; if(i==50) break; }) 这样做:- var list_length = $("ul li").length; var x; //Assign amount of items for(var i = 0; i <= x; i++)

标记:

在1和列表长度之间选择一个随机数r。 选择el%r==0的所有元素。
完成

我想你可以做这样的事情:

something like:
var i = 0;
$("li:random").each(function(){
    i++; if(i==50) break;
})
这样做:-


var list_length = $("ul li").length;
var x; //Assign amount of items
for(var i = 0; i <= x; i++) {
   Math.floor((Math.random()*list_length));
   //Select stuff in here
}
CSS 将随机列表编号8更改为50或任意数字

参考


复制自此答案。

下面是一个如何使用javascript函数实现此功能的快速示例:

.activeLI {
    color: red;
}​
它将选定的CSS类添加到3个随机列表项中。在这里查看工作演示-

演示:


@Esailija的可能重复项不是完全重复项,我想我不明白这个问题怎么会因为这么多答案而被否决..这是如何选择给定数量的项目的?它似乎选择了随机数目的项目。@apsillers谢谢!,是的,请Esteban,你能详细说明一下吗?@TonimichelCaubit是列表项的数量,无论你想要随机选择多少项,它都会生成一个从0到列表项最大数量的随机数。但是我如何选择呢?$'ul li'[i]?@tonimichelCaubit您可以使用$li.eqi来选择元素。我看到它会检查项目是否较少?这太可怕了,如果同一个元素被选中两次呢?你是对的,我已经更新了小提琴来解决这个问题-@tonimichel我的答案可以避免重复
randomList = 8;

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

$(randomElements).addClass("activeLI");​
.activeLI {
    color: red;
}​
$(function() {
    var randomItemsNum = 3;
    var totalItems = $('#mylist > li').length;

    for (var index = 0; index < randomItemsNum; index++) {
        var randomIndex = Math.floor((Math.random() * totalItems) + 1);
        var item = $('#mylist > li:nth-child(' + randomIndex + ')');
        if (item.hasClass('selected')) {
            index--;
            continue;
        }
        else {
            item.addClass('selected');
        }
    }
});
function selectRandomFromList($list, num){
    var $children = $list.children(),
        len = $children.length,
        a = [],
        o = {},
        r,
        $items = $([]);

    if (!len) { return $items; }
    if (num >= len) { return $children; }

    // Build an array of unique indices
    while (a.length < num) {
        r = Math.floor(Math.random() * len);
        if (!o.hasOwnProperty(r)) {
            o[r] = 1;
            a.push(r);
        }
    }

    // grab the items
    while (num--) {
        $items = $items.add($children.eq(a.pop()));
    }

    return $items;
}
selectRandomFromList($('ul'), 3);