Вы можете немного упростить свой подход следующим образом:
$("#filter").change(function(){
var tval=$(this).val();
$("li").hide().filter(":contains('"+tval+"')").find('li').andSelf().show();
});
Это скрывает все <li>
элементов, а затем показывает, содержат ли они непосредственно значение (или являются родительскими, которыесодержит его) ... и для тех, кто также показывает все потомки <li>
элементов, показывая все дочерние элементы , мы надеемся, , как вы хотите.