使用jQuery选择隐藏元素并对其进行操作

5

在类名为“section”的div包装器内,页面上重复出现了数十个HTML元素,看起来像这样:

<div class="section">
  <div class="article"></div>
  <div class="article"></div>
  <div class="article"></div>
</div>

每个都包含一定的信息。现在,我想要做的是页面加载后只显示前5个,将其余隐藏在使用jQuery插入的新div中,当单击此新div时,它将显示接下来的五个,然后再次单击时显示接下来的五个,以此类推,直到结束。这个新的div将作为一个按钮,始终位于页面末尾,并响应我刚才提到的命令。到目前为止,我已经完成了以下内容:

$('.section').each(function () {
    var $this = $(this),
        $allArticles = $this.find('.article');

    if ($allArticles.length > 5) {
        $('<div/>').addClass('hidden-articles').appendTo(this).append($allArticles.slice(5));
        $('.hidden-articles .article').hide();
    }
});

这将隐藏除前五个之外的所有内容。但是,对于其余的过程,我无法使其正常工作。我似乎无法正确选择那些具有"class"为"article"的隐藏div,并操纵它们以按照上述描述运行。如果有更有经验的jQuery用户能指导我正确的方向并提供一些片段,我将不胜感激。提前致谢!


你应该在这里发布你的 HTML 代码。 - The Alpha
1个回答

2
您可以使用:hidden和:lt选择器来获得您所需要的功能。
$('.section').each(function() {
    var $this = $(this),
        $allArticles = $this.find('.article');

    if ($allArticles.length > 5) {
        $('<div/>').addClass('hidden-articles')
                   .appendTo(this).append($allArticles.slice(5));
        $this.find('.hidden-articles .article').hide();

    }
});

$('#show').on('click',function() {
    var $hidden = $('.hidden-articles .article:hidden:lt(5)');
    $hidden.show();
});​

更新

// If one one element to search 
var elem = '.section' ;
hideArticles(elem);

// If Multiple Elements on the page...
$('.section').each(function() {
    hideArticles(this);
});

$('#show').on('click', function() {
    var $hidden = $('.hidden-articles .article:hidden:lt(5)');
    $hidden.show();
});

function hideArticles(elem) {
    var $this = $(elem),
        $allArticles = $this.find('.article');

    if ($allArticles.length > 5) {
        $('<div/>').addClass('hidden-articles')
                   .appendTo(this).append($allArticles.slice(5));
        $this.find('.hidden-articles .article').hide();
    }
}​

查看示例


感谢您详细的回复。这已经接近我想要的了,如果可以的话,我会点赞您的帖子。然而,问题在于单击切换按钮将显示在部分中隐藏的所有内容,这可能是数十个项目,而我只是想找到一种方法,在单击时显示下一个五个,然后再次显示下一个五个元素,而不仅仅是一批元素。这里是我为您创建的fiddle。如何创建一个按钮,它将始终位于页面末尾,并在单击后动态地显示一组文章?再次感谢! - Blueshift
@Sushanth.. 你太棒了!这正是我在寻找的概念,现在我已经调整了代码以适应我的需求。真的很有帮助。我有一个快速问题要问你:假设我不想在整个文档中运行 .section 选择器上的 .each() 方法,因为只会有一个这样的选择器。我正在考虑将所有代码移动到 .each() 方法内部的新函数中是一个好的选择,但是是否有一种方法可以将选择器传递给我的新函数?你会如何建议我做这件事?谢谢! - Blueshift
@Annabel .. 不客气 :) .. 如果是这样的话,你可以将 this 对象传递给函数,因为那是唯一需要的对象.. 我已经更新了帖子,提供了我现在能想到的方法.. - Sushanth --

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接