【问题标题】:given a long list, how can i select x elements randomly?给定一个长列表,我如何随机选择 x 个元素?
【发布时间】:2012-06-14 18:21:38
【问题描述】:

标记:

<ul>
<li>Bla</li>
<li>Ble</li>

...


<li>zla</li>
</ul>

假设它的列表很长,我如何随机选择 x 个项目?

-编辑-

不完全重复,我正在尝试选择 x 个项目;

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

【问题讨论】:

  • jQuery: select random elements 的可能重复项
  • @Esailija 并不完全重复,我认为
  • 我不明白这个问题怎么会因为这么多答案而被否决..

标签: javascript jquery random jquery-selectors


【解决方案1】:

这是一个如何使用 javascript random 函数获取此信息的快速示例:

$(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');
        }
    }
});

它将选定的 CSS 类添加到 3 个随机列表项。在此处查看工作演示 - http://jsfiddle.net/Pharaon/PPW9J/1/

【讨论】:

  • 如果同一个元素被选中两次怎么办?
  • 你说得对,我已经更新了小提琴来解决这个问题 - jsfiddle.net/Pharaon/PPW9J/1
  • @ToniMichelCaubet 我的回答避免重复
【解决方案2】:
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);

演示:

http://jsfiddle.net/lbstr/d8JgP/

【讨论】:

  • 我看到它检查是否有更少的项目?太棒了
【解决方案3】:
  1. 在 1 和列表长度之间选择一个随机数 (r)。
  2. 选择 el# % r == 0 的所有元素。

完成。 :)

【讨论】:

  • 如何选择给定数量的项目?它似乎选择了随机数量的项目。
  • @apsillers 谢谢!是的,请埃斯特班,你能详细说明一下吗?
【解决方案4】:

我认为你可以做这样的事情:


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
}

【讨论】:

  • @ToniMichelCaubet 它获取列表项的数量,无论您想要随机选择多少东西,都会生成一个从 0 到最大列表项数量的随机数。
  • 但是我该如何选择呢? $('ul li')[i] ?
  • @ToniMichelCaubet 你可以用$("li").eq(i) 来选择元素。
【解决方案5】:

这样做:-

randomList = 8;

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

$(randomElements).addClass("activeLI");​

CSS

.activeLI {
    color: red;
}​

将 randomList 编号 8 更改为 50 或任何数字。

请参阅LIVE DEMO

复制自jQuery: select random elements这个答案。

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 2018-03-06
    • 2023-01-11
    • 2011-05-29
    • 1970-01-01
    • 2021-12-30
    • 2017-04-26
    • 1970-01-01
    相关资源
    最近更新 更多