随机div,只显示其中的一部分

时间:2014-03-07 14:54:56

标签: javascript jquery html

我在我的网站上使用此代码来随机化div的顺序。在我的一个子页面中,我想在稍微修改的版本中使用它 - 将会有12个div以随机顺序再次显示,但只会显示前3个,其余的将设置为“display:none;”或使用js的类似效果。

如何修改以下代码,以便只显示3个第一个div?

以下是代码:http://jsfiddle.net/ca7WW/

HTML:

<div class="randomize">
    <div class="random_div">1</div>
    <div class="random_div">2</div>
    <div class="random_div">3</div>
    <div class="random_div">4</div>
    <div class="random_div">5</div>
    <div class="random_div">6</div>
    <div class="random_div">7</div>
    <div class="random_div">8</div>
    <div class="random_div">9</div>
    <div class="random_div">10</div>
    <div class="random_div">11</div>
    <div class="random_div">12</div>
</div>

jQuery的:

function shuffle(array) {
  var currentIndex = array.length
    , temporaryValue
    , randomIndex
    ;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

(function ($) {
    $.fn.randomize = function (childElem) {
        return this.each(function () {
            var $this = $(this);
            var elems = shuffle($(childElem));
            $this.remove(childElem);
            for (var i = 0; i < elems.length; i++)
            $this.append(elems[i]);
        });
    }
})(jQuery)

jQuery(function($){
    $("div.randomize").randomize("div.random_div");
});

3 个答案:

答案 0 :(得分:3)

使用:lt:gt获取选择器中的“前N个”或“后N个”元素。

DEMO

jQuery(function($){
    $("div.randomize").randomize("div.random_div");
    $(".random_div:gt(2)").hide(); // This hides anything after the 3rd element
});

答案 1 :(得分:2)

首先使用容器ID,以便轻松调用:

<div id="randomize">
    <div class="random_div">1</div>
    <div class="random_div">2</div>
    <div class="random_div">3</div>
    <div class="random_div">4</div>
    ...
</div>

然后添加此javascript:

var divs = document.getElementById('randomize').getElementsByTagName('div');
var nr = 1;
for(var a = 0 ; a < divs.length ; a++){
    if(divs[a].getAttribute('class') == 'random_div'){
        if(nr <= 3){
            divs[a].style.display = 'inherit';
        }else{
            divs[a].style.display = 'block';
        }
        nr = nr + 1;
    }
}

答案 2 :(得分:1)

试试这个:jsFiddle

(function ($) {
    $.fn.randomize = function (childElem) {
        return this.each(function () {
            var $this = $(this);
            var elems = shuffle($(childElem));
            $this.remove(childElem);
            for (var i = 0; i < elems.length; i++){
                $this.append(elems[i]);

                //Show only the first three elements
                if (i <= 2){
                   $(elems[i]).show();
                }else{
                    $(elems[i]).hide();
               }
            }
        });
    }
})(jQuery)

编辑:我同意@kei有更清晰,更灵活的答案。我只想指出,只有在页面加载时将div一次随机化时,才应使用他的解决方案。如果你想多次随机化它们,请确保在随机化之前取消隐藏div,否则它将无法正常工作。例如:

function(){
    $(".random_div").show();//make sure all divs are visible
    $("div.randomize").randomize("div.random_div");
    $(".random_div:gt(2)").hide();
}