Javascript 过滤多级列表

Javascript 过滤多级列表,javascript,nested-lists,fuzzy-search,jquery-filter,Javascript,Nested Lists,Fuzzy Search,Jquery Filter,我有一个深度嵌套的列表(10个级别),我想筛选该列表,以便获得我搜索的,如果该有子项,我也想向他们展示,下面是一个代码示例 $(文档).ready(函数(){ $(“#过滤器”).keyup(函数(){ var filter=$(this.val(); $(“li”)。每个(功能){ 如果(过滤器==“”){ $(this.css(“可见性”、“可见”); $(this.fadeIn(); }else if($(this).text().search(新的RegExp(filter,“i”))

我有一个深度嵌套的列表(10个级别),我想筛选该列表,以便获得我搜索的
  • ,如果该
  • 有子项,我也想向他们展示,下面是一个代码示例

    $(文档).ready(函数(){
    $(“#过滤器”).keyup(函数(){
    var filter=$(this.val();
    $(“li”)。每个(功能){
    如果(过滤器==“”){
    $(this.css(“可见性”、“可见”);
    $(this.fadeIn();
    }else if($(this).text().search(新的RegExp(filter,“i”)))<0){
    $(this.css(“可见性”、“隐藏”);
    $(this.fadeOut();
    }否则{
    $(this.css(“可见性”、“可见”);
    $(this.fadeIn();
    }
    });
    });
    });
    
    
    
    • 汤姆
    • 彼得
      • 约翰
        • 母鹿
          • 什叶派
      • 尼古拉斯
      • 里姆
    • 丹尼尔
      • 亚当
    $(文档).ready(函数(){
    $(“#过滤器”).keyup(函数(){
    var filter=$(this.val();
    $(“li”)。每个(功能){
    如果(过滤器==“”){
    $(this.css(“可见性”、“可见”);
    $(this.fadeIn();
    }else if($(this).text().search(新的RegExp(filter,“i”)))<0){
    $(this.css(“可见性”、“隐藏”);
    $(this.fadeOut();
    }否则{
    $(this.css(“可见性”、“可见”);
    $(this.fadeIn();
    }
    });
    });
    $('.hasSub')。单击(函数(){
    $(this.parent().toggleClass('subactivated');
    $(this.parent().children('ul:first').toggle();
    if($(this).find('i').hasClass('glyphicon-folder-open')){
    $(this).find('i').removeClass('glyphicon-folder-open').addClass('glyphicon-folder-close');
    }否则{
    $(this).find('i').removeClass('glyphicon-folder-close').addClass('glyphicon-folder-open');
    }
    }); 
    });
    
    .fordtreeview ul{
    显示:无;
    利润率:15px-16px;
    列表样式:无;
    }
    .fordtreeview ul{
    显示:块;
    }
    fordtreeview ul li先生{
    左:5px;
    右边距:10px;
    颜色:#333;
    }
    李:第一个孩子{
    显示:块!重要;
    }
    fordtreeview li先生,
    fordtreeview{
    颜色:#333;
    文字装饰:无;
    光标:指针;
    }
    .fordtreeview i.glyphicon{
    右边距:5px;
    }
    .未激活,
    .fordtreeview>li:不是(:第一个孩子):悬停{
    背景色:#F5;
    }
    
    
      彼得
        约翰 尼古拉斯
      丹尼尔
      • Adam
    确定:)仅添加

    else if($(this).text().search(new RegExp(filter,“i”))<0){
    如果(!$(this.parent().parent().is('li')){
    $(this.css(“可见性”、“隐藏”);
    $(this.fadeOut();
    }
    } 
    
    一旦找到匹配的Regexp,您可能希望停止检查元素。我打赌你可以用
    nextUntil
    重新编写你想要的函数:你能给我一个工作示例吗?这几乎是我已经拥有的,但不是我想要的。我想要的是,如果我搜索“彼得”和“彼得”有孩子,我想能够扩展“彼得”和谁是他的孩子。
             else if ($(this).text().search(new RegExp(filter, "i")) < 0) {
    
                if(!$(this).parent().parent().is('li')){
                    $(this).css("visibility", "hidden");
                    $(this).fadeOut();
                }
    
            }