Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择5个随机元素_Javascript_Jquery - Fatal编程技术网

Javascript 选择5个随机元素

Javascript 选择5个随机元素,javascript,jquery,Javascript,Jquery,如何选择前5个随机元素 <ul> <li>First</li> <li>Second</li> <li>Third</li> ... <li>N</li> </ul> 但它需要所有的随机元素。我只想要前5个 还有其他方法可以做同样的事情吗?获取一个随机数索引1-5,然后使用该索引获取ul的子级。像这样: $("li:lt(5):ran

如何选择前5个随机元素

<ul>
    <li>First</li>
    <li>Second</li>
    <li>Third</li>
     ...
    <li>N</li>
</ul>
但它需要所有的随机元素。我只想要前5个


还有其他方法可以做同样的事情吗?

获取一个随机数索引1-5,然后使用该索引获取ul的子级。像这样:

$("li:lt(5):random").text()
var index = Math.floor(Math.random() * 5) + 1;  // nth-child indices start at 1
alert($("ul:nth-child(" + index + ")").text());

下面是如何从jQuery选择中获得5个随机元素,无需插件

randomElements = jQuery("li").get().sort(function(){ 
  return Math.round(Math.random())-0.5
}).slice(0,5)
此时,您有5个DomeElement,它们是从jQuery返回的所有LIs中随机选择的

然后你可以对他们做任何你喜欢的事, e、 g改变颜色:

$(randomElements).css("color","red")
或显示其组合文本内容:

$(randomElements).text()

为什么不这样做呢,它看起来相当有效:

jQuery('li:random').slice(0, 5);
使用我已经为此创建了一个小脚本。这是通过首先创建jQuery元素数组的随机混合和切片副本来完成的,然后过滤掉两个数组中不存在的所有元素

你可以在网站上阅读。以下是脚本:

/**
 * 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,然后使用li first-five:random?我不知道jQuery支持:random伪选择器,如何添加此功能以及它背后的代码逻辑是什么?但如果你能告诉我另一种方法,如何选择5个随机元素,将是令人惊叹的,但它总是需要前5+1,尽管我很好奇为什么你在文本中始终正确地拼写random,而在代码段中始终错误地拼写random…:-一般的想法是好的,但是你不应该像那样洗牌一个数组。排序是洗牌数组的一种低效方法,不一致的比较可能会导致问题,甚至可能导致排序无限循环。最好使用Fisher-Yates洗牌。这不会得到一个随机排序的数组。这里有一篇关于它的文章,它是Objto-C,但不应该像格奥尔指出的那样,它不会产生至少一个枢轴元素的随机集合,最可能的是在快速排序数组时使用中间集合。乔治的链接读得很好!向下投票,这很糟糕。选择X个随机元素是O1,而对整个集合进行排序最多需要对数n。哦,这是完全错误的。我把这个问题理解为要求前五个随机元素中的一个,而不是集合中的五个随机元素。我想我需要睡觉通过精确地搜索这种解决方案,DGot在这里。所以回答误读的问题并不总是坏事:Math.random——也就是说,包括0但不包括1。因此,指数有可能为0,尽管这种可能性很小。要避免这种情况,请使用var index=Math.floorMath.random*5+1;。可能是因为jQuery没有:随机选择器了?
  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.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);