查找隐藏的元素并将它们存储在数组中

Find hidden elements and store them in an array

本文关键字:存储 数组 隐藏 元素 查找      更新时间:2023-09-26

我有一些这样的标记:

<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,所以不起作用。。。我想我需要设置一个数组?有人能帮我吗,因为我有点困惑。

试试下面的

演示

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

这个怎么样:

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

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

如果是这样,您必须使用迭代您的选择

$("div.slideshow > div.slide:nth-child(" + ran + ")").each(function() {
    $(this).show();
});

这应该适用于您:

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之一。

说明:

它不会起作用,因为元素的顺序没有得到保证,为什么不使用您应用的相同选择器来迭代元素以查找隐藏的元素呢?

示例:

保存可见元素:

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