0

我有一些像这样的标记:

<div class="slideshow">
    <div class="slide" style="display:block;"></div>
    <div class="slide" style="display:none;"></div>
    <div class="slide" style="display:none;"></div>
    <div class="slide" style="display:none;"></div>
</div>

这基本上是一些 div,其中一个显示而其他隐藏。

我正在尝试找到当前未显示的那些,然后随机选择其中一个...

var length = $('div.slideshow').find('div.slide:hidden').length;

var ran = Math.floor(Math.random()*length) + 1;
var newSlide = $("div.slideshow > div.slide:nth-child(" + ran + ")");

但是,因为它们不止一个隐藏的 div,所以它不起作用......我猜我需要设置一个数组?任何人都可以在这里帮助我,因为我有点困惑。

4

5 回答 5

3

试试下面,

演示

var $hiddenSlides = $('div.slideshow').find('div.slide:hidden');
var length = $hiddenSlides.length;

var ran = Math.floor(Math.random()*length );
var newSlide = $hiddenSlides.get(ran);
于 2012-04-05T14:58:32.953 回答
1

这个怎么样:

var $hiddenSlides = $('div.slideshow').find('div.slide:hidden');
var ran = Math.floor(Math.random()*$hiddenSlides.length);
var newSlide = $hiddenSlides.get(ran);
于 2012-04-05T15:02:15.963 回答
0

$("div.slideshow > div.slide:nth-child(" + ran + ")"从所有孩子中选择,包括已经可见的孩子。你想要那个吗?

如果是这样,您必须使用

$("div.slideshow > div.slide:nth-child(" + ran + ")").each(function() {
    $(this).show();
});
于 2012-04-05T14:57:35.450 回答
0

这应该适合你:

var length = $('div.slideshow').find('div.slide:hidden').length;
var ran = Math.floor(Math.random()*length);
var newSlide = $(".slideshow .slide:hidden:eq(" + ran + ")");

您将在这个jsFiddle中看到输出始终是隐藏的 div 之一。

于 2012-04-05T15:00:48.643 回答
0

解释:

它不会起作用,因为不能保证元素的顺序,为什么不使用与查找隐藏元素相同的选择器遍历元素呢?

例子:

保存可见元素:

var shownSlide = $("div.slideshow > div.slide:visible");

应用随机遍历:

var ran = Math.floor(Math.random()*length) + 1;
$("div.slideshow > div.slide:hidden:eq(" + ran + ")").show();

而不是重新隐藏可见元素:

$(shownSlide).hide();
于 2012-04-05T15:01:54.420 回答