【问题标题】:JQuery list filter wont work with wrong charactersJQuery 列表过滤器不适用于错误的字符
【发布时间】:2014-06-18 05:36:35
【问题描述】:

我有这个过滤器用于我从Keyup filter multiple lists with headers with jQuery 获得的 html 列表。问题是,一旦您输入了一个不在列表中的错误单词/字符,它就会中断并且在您从输入框中完全擦除/删除它之前不会起作用。有没有办法修复原始代码,即使在您简单地退格并擦除错误字符后它也能正常工作?

http://jsfiddle.net/thesystemrestart/zzG4f/5/

HTML:

<ul id="workflow_books">    
<li>
    <h6 class="custom"> Custom Books</h6>

    <ul>
        <li class="custom-books">
            <a>Don't see your book in our list? Add it yourself!</a>
        </li>
    </ul>
</li>

<li>
    <h6>Academic</h6>

    <ul>
        <li>
            <a>Academic Book One</a>
        </li>

        <li>
            <a>Academic Book Two</a>
        </li>
    </ul>
</li>

<li>        
    <h6>Botany</h6>

    <ul>
        <li>
            <a>Botany Book One</a>
        </li>

        <li>
            <a>Botany Book Two</a>
        </li>
    </ul>
</li>
</ul>

jQuery

var $products = $('#workflow_books li ul');
$("#search").keyup(function() {
    var val = this.value.trim();
    if (!val) $('li:hidden', '#workflow_books').show();
    else {
        $('li:hidden', $products).show();
        $('li', $products).filter(function() {
            var re = new RegExp(val, 'ig');
            return !re.test($('a', this).text());
        }).hide();
        $products.each(function() {
            if ($('li:visible', this).length == 0) $(this).parent('li').hide();
            else $(this).parent('li').show();
        });
    }
});

我非常感谢任何帮助。谢谢。

【问题讨论】:

    标签: javascript jquery html list filter


    【解决方案1】:

    问题在于这一行:

    $('li:hidden', $products).show();
    

    如果父母已被隐藏,则不显示父母,所以这一行:

    if ($('li:visible', this).length == 0)
    

    当父级隐藏时永远不能为假。

    我的主要变化是我在上面发布的第一行:

    $('li:hidden', '#workflow_books').show();
    

    工作小提琴:http://jsfiddle.net/hKv8h/

    var $products = $('#workflow_books li ul:not(:first)');
    $("#search").keyup(function() {
        var val = this.value.trim();
        $('li:hidden', '#workflow_books').show();
        if (val) {
            $('li:hidden', '#workflow_books').show();
            $('li', $products).filter(function() {
                var re = new RegExp(val, 'ig');
                return !re.test($('a', this).text());
            }).hide();
            $products.each(function() {
                if ($('li:visible', this).length == 0) 
                    $(this).parent('li').hide();
                else 
                    $(this).parent('li').show();
            });
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多