Подтвердить что ты не робот

Выберите 5 случайных элементов

Как выбрать первые 5 случайных элементов

<ul>
    <li>First</li>
    <li>Second</li>
    <li>Third</li>
     ...
    <li>N</li>
</ul>

Я использую этот плагин:

alert($("li:random").text());

но он принимает все случайные элементы. Мне нужны только первые 5.

Есть ли другой способ сделать то же самое?

4b9b3361

Ответ 1

Здесь, как получить 5 случайных элементов из выбора jQuery, нет необходимости в плагинах!

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

В этот момент у вас есть 5 DomElements, которые были выбраны случайным образом из всех LI, которые возвратили jQuery

Затем вы можете делать все, что вам нравится,

например, изменить цвет:

$(randomElements).css("color","red")

или отобразить их комбинированное текстовое содержимое:

$(randomElements).text()

Ответ 2

Получить индекс случайных чисел, 1-5, и получить дочерний элемент ul с этим индексом. Например:

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

Ответ 3

Используя Fisher-Yates shuffle, для этой цели я создал небольшой script. Это делается путем создания случайной перетасованной и нарезанной копии массива элементов jQuery, а затем фильтрации всех элементов, которые не существуют в обоих массивах.

Вы можете прочитать об этом на http://www.afekenholm.se/jquery-rand. Здесь script:

/**
 * 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);

Ответ 4

  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;
    }
  });

Ответ 5

$("li:lt(5):random").text()

Ответ 6

Почему бы просто не сделать это, кажется довольно эффективным:

jQuery('li:random').slice(0, 5);