Jquery:如何基于搜索条件隐藏/显示树元素?

时间:2010-09-11 13:45:23

标签: jquery contains

我有一个基于< ul>和< li>标签

我试图根据过滤器文本隐藏分支。 这是我的显示/隐藏代码:

$("#filter").change(function(){
       var tval=$(this).val();
       $("li").show();
       $("li").not(":contains(\'"+tval+"\')").hide();
       $("li").is(":contains(\'"+tval+"\')").show();

       })

命令:     $( “李”)为( “:包含(\ ' ”+ tval +“ \')”)显示()。 显示按给定tval过滤的分支,但是如果给定< li>还有一个孩子,我想向他们展示。 如果它们存在,我如何显示所有子元素?

亲切的问候阿曼。

修改

示例:搜索文本A,我们有D => A => C,D => C => C,A => K => S,所以在过滤后我的树应该是:D => A => C,A => K => S.在当前的实现中,它看起来像D => A,A

3 个答案:

答案 0 :(得分:3)

您可以将此方法简化为:

$("#filter").change(function(){
   var tval=$(this).val();
   $("li").hide().filter(":contains('"+tval+"')").find('li').andSelf().show();
});

这会隐藏所有 <li>元素,然后显示它们是否直接包含该值(或者是包含它的父级)...并且还显示所有后代{{1元素,显示所有孩子希望就像你想要的那样。

答案 1 :(得分:0)

如果我理解正确,child selector就是你想要的。

答案 2 :(得分:0)

试试这个

$("#filter").change(function(){
       var tval=$(this).val();
       $("li").hide();
       if(tval != ""){             
         $("li").each(function() { 
           if($(this).is(":contains(\'"+tval+"\')")){ 
             $(this).show().find('li').show();
           }
         });
       }
       else {
         $("li").show();
       }
})

所以隐藏所有这些,然后寻找匹配,然后为每个匹配的li显示它和所有的孩子li

编辑:再次编辑,对不起我上次完全错过了