javascript - jQuery 在一定数量的匹配元素后切换显示/隐藏元素

标签 javascript jquery jquery-selectors

在实现分面搜索时,如果选项数小于或等于 7,我将全部显示。如果选项的数量超过 7,我将只显示前 5 个并插入一个链接来切换这些选项的显示。

我在这种情况下的问题是,如何遍历匹配元素列表,在这种情况下 li 属于 .facet ul,并执行此操作功能。其次,我需要在 .facet ul 的末尾 .appendTo() 一个 li,它根据我是否正在显示来显示文本全部或部分。

如果全部显示,我希望文本显示为“...更少的选择”。如果我显示的很少,我希望文本显示为“... n 更多选择”。

非常感谢将这些功能中的每一个都推向正确的方向,或者提供完整的解释。

下面的代码供引用。

    <div class="facet">
  <h4>Brands</h4>
  <ul>
   <li><a class="all" href="#">Really long brand name facet to show what happens with multi-line facets <em>(63)</em></a></li>
   <li><a class="all" href="#">Joe Rocket <em>(57)</em></a></li>
   <li><a class="all" href="#">Icon <em>(42)</em></a></li>
   <li><a class="all" href="#">Fieldsheer <em>(37)</em></a></li>
   <li><a class="all" href="#">Tour Master <em>(21)</em></a></li>
   <li><a class="all" href="#">AGV Sport<em>(21)</em></a></li>
   <li><a class="all" href="#">Alpinestars<em>(21)</em></a></li>
   <li><a class="all" href="#">Cortech<em>(21)</em></a></li>
   <li><a class="all" href="#">Element<em>(21)</em></a></li>
   <li><a class="all" href="#">Fieldsheer<em>(21)</em></a></li>
   <li><a class="all" href="#">Firstgear<em>(21)</em></a></li>
   <li><a class="all" href="#">FMF Apparel<em>(21)</em></a></li>
   <li><a class="all" href="#">Icon<em>(21)</em></a></li>
   <li><a class="all" href="#">Joe Rocket<em>(21)</em></a></li>
   <li><a class="all" href="#">O'Neal Racing<em>(21)</em></a></li>
   <li><a class="all" href="#">Power Trip<em>(21)</em></a></li>
   <li><a class="all" href="#">REV'IT!<em>(21)</em></a></li>
   <li><a class="all" href="#">River Road<em>(21)</em></a></li>
   <li><a class="all" href="#">Rockstar<em>(21)</em></a></li>
   <li><a class="all" href="#">Scorpion<em>(21)</em></a></li>
   <li><a class="all" href="#">Shift Racing<em>(21)</em></a></li>
   <li><a class="all" href="#">Speed and Strength<em>(21)</em></a></li>
   <li><a class="all" href="#">Spidi<em>(21)</em></a></li>
   <li><a class="all" href="#">Teknic<em>(21)</em></a></li>
   <li><a class="all" href="#">Tour Master<em>(21)</em></a></li>
   <li><a class="all" href="#">Troy Lee Designs<em>(21)</em></a></li>
   <li><a class="all" href="#">Vega<em>(21)</em></a></li>
   <li><a class="all" href="#">Yoshimura<em>(21)</em></a></li>
   <li><a class="all" href="#">Z1R<em>(21)</em></a></li>
  </ul>
 </div>

'all' 类在这里无关紧要,它还有另一个用途。请随意忽略它。

最佳答案

您正在寻找 :gt选择器:

$('.facet').each(function() {
    var ul = $('ul', this);
    if(ul.children('li').size() <= 7) return;

    var hiddenElements = ul.children('li:gt(4)', this).hide();

    var showCaption = '...' + hiddenElements.size() + ' More Choices';
    ul.append(
        $('<li class="toggler">' + showCaption + '</li>')
            .toggle(
                function() { 
                    hiddenElements.show();
                    $(this).text('...Fewer Choices');
                }, 
                function() { 
                    hiddenElements.hide();
                    $(this).text(showCaption);
                }
            )
    );
});

DEMO

关于javascript - jQuery 在一定数量的匹配元素后切换显示/隐藏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2411588/

相关文章:

Javascript 警报根本不显示

javascript - 从 JSON 文件 JavaScript 创建自定义 TreeView

javascript - 使用 WebUSB 从串行设备读取整个响应

jquery - 使用 Bootstrap,我需要替换我的 div 的顺序

jquery - 来自 $(this).attr 的选择器 jquery

javascript - 通过类名和文本查找元素的选择器

javascript - 为什么通过 Twilio 获得意想不到的 token ?

php - 无法使用 AJAX 从 PHP 生成的 Bootstrap 选项卡中检索数据

javascript - 如何获取JSON中的特定元素

jquery - 如何在 Jquery 中进行字符串引号