jquery - 显示/隐藏列表项并添加更多/更少链接

标签 jquery append toggle

我需要一些帮助来显示/隐藏第 n-child 之后的列表项以及 append 依赖于父类的更多/更少链接。如果父级具有“expanded”类,我将如何 append 带有 less 链接的列表项?

到目前为止,我的代码的问题(见下文)是我最初 append “更多”链接,即使父级具有“扩展”类。单击该项目后,它就会正常运行。

您还可以查看 fiddle here

$('ul.expandible').each(function(){
    var lis = $(this).find('li:gt(4)');
    if(!$(this).hasClass('expanded')) {
        lis.hide();
    } else {
        lis.show();
    }
    
    if(lis.length>0){
        $(this).append($('<li class="expand"><span>More</span></li>').click(function(event){
            var $expandible = $(this).parents('.expandible');
            $expandible.toggleClass('expanded');
            if ( !$expandible.hasClass('expanded')) {
                $(this).text('More');
            } else {
                $(this).text('Less');
            };
            lis.toggle();
            event.preventDefault();
        }));
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h3>First List with "expanded" class loaded</h3>
<ul class="expandible expanded">
    <li>Option 1</li>
    <li>Option 2</li>
    <li>Option 3</li>
    <li>Option 4</li>
    <li>Option 5</li>
    <li>Option 6</li>
    <li>Option 7</li>
</ul>

<h3>Second List without "expanded" class</h3>
<ul class="expandible">
    <li>Option 1</li>
    <li>Option 2</li>
    <li>Option 3</li>
    <li>Option 4</li>
    <li>Option 5</li>
    <li>Option 6</li>
    <li>Option 7</li>
</ul>

最佳答案

你就快到了。试试这个;

$('ul.expandible').each(function(){
    var $ul = $(this),
        $lis = $ul.find('li:gt(4)'),
        isExpanded = $ul.hasClass('expanded');
    $lis[isExpanded ? 'show' : 'hide']();
    
    if($lis.length > 0){
        $ul
            .append($('<li class="expand"><span>' + (isExpanded ? 'Less' : 'More') + '</span></li>')
            .click(function(event){
                var isExpanded = $ul.hasClass('expanded');
                event.preventDefault();
                $(this).text(isExpanded ? 'More' : 'Less');
                $ul.toggleClass('expanded');
                $lis.toggle();
            }));
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h3>First List with "expanded" class loaded</h3>
<ul class="expandible expanded">
    <li>Option 1</li>
    <li>Option 2</li>
    <li>Option 3</li>
    <li>Option 4</li>
    <li>Option 5</li>
    <li>Option 6</li>
    <li>Option 7</li>
</ul>

<h3>Second List without "expanded" class loaded</h3>
<ul class="expandible">
    <li>Option 1</li>
    <li>Option 2</li>
    <li>Option 3</li>
    <li>Option 4</li>
    <li>Option 5</li>
    <li>Option 6</li>
    <li>Option 7</li>
</ul>

我很着急,所以我的回答有点短。对于那个很抱歉。现在解释一下:

  1. 在 jQuery 对象前添加 $ 符号。
  2. 如果您要多次使用 jQuery 变量,请缓存它们以供将来使用,例如 $ul = $(this);
  3. 您可以使用 jQuery 方法,例如数组元素。将其与三元运算符结合使用,您可以使用如下快捷方式: $lis[isExpanded ? '显示' : '隐藏']();

关于jquery - 显示/隐藏列表项并添加更多/更少链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27713352/

相关文章:

javascript - div下无法添加按钮

Javascript/jQuery - 根据数值删除/添加多个元素的类

PHP MYSQL 检查和追加功能

php - jQuery如何将类添加到具有特定类名的第三级子div的父div

css - 如何防止内联 CSS 链接 "color"取消 CSS 样式表链接 "hover"?

javascript - 如果重构,重构 AJAX 调用将不起作用

javascript - jQuery 中此对象的目标子元素?

有人可以解释如何在 C 编程中将元素 append 到数组吗?

javascript - JS数组切换推送和拼接

jquery - 单击按钮更新多功能图像的图像源