提问人:Ruby 提问时间:1/15/2017 更新时间:10/20/2017 访问量:1459
筛选多级列表
Filter Multi-Level List
问:
我有一个深度嵌套的列表(10 个级别),我想过滤该列表,以便我可以获得我搜索到的列表,如果它有孩子,我也想向他们展示,这是一个代码示例......<li>
<li>
$(document).ready(function () {
$("#filter").keyup(function () {
var filter = $(this).val();
$("li").each(function () {
if (filter == "") {
$(this).css("visibility", "visible");
$(this).fadeIn();
} else if ($(this).text().search(new RegExp(filter, "i")) < 0) {
$(this).css("visibility", "hidden");
$(this).fadeOut();
} else {
$(this).css("visibility", "visible");
$(this).fadeIn();
}
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="filter" type="text" />
<ul>
<li>Tom</li>
<li> <a>Peter</a>
<ul>
<li> <a>John</a>
<ul>
<li> <a>Doe</a>
<ul>
<li> <a>Shia</a>
</li>
</ul>
</li>
</ul>
</li>
<li><a>Nicolas</a>
</li>
<li><a>Reem</a>
</li>
</ul>
</li>
<li><a>Danial</a>
<ul>
<li> <a>Adam</a>
</li>
</ul>
</li>
</ul>
在上面的例子中,我设法得到了我搜索到的,但我不知道如何让它的孩子可见和打开(如果有的话)。<li>
注意:你不必重复使用我在这里发布的代码,如果可以的话,你可以发布一个更好、更灵活的实现。
答:
0赞
C Van
9/29/2017
#1
$(document).ready(function () {
$("#filter").keyup(function () {
var filter = $(this).val();
$("li").each(function () {
if (filter == "") {
$(this).css("visibility", "visible");
$(this).fadeIn();
} else if ($(this).text().search(new RegExp(filter, "i")) < 0) {
$(this).css("visibility", "hidden");
$(this).fadeOut();
} else {
$(this).css("visibility", "visible");
$(this).fadeIn();
}
});
});
$('.hasSub').click(function () {
$(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');
}else{
$(this).find('i').removeClass('glyphicon-folder-close').addClass('glyphicon-folder-open');
}
});
});
.fordtreeview ul{
display:none;
margin: 15px -16px;
list-style:none;
}
.fordtreeview ul.expanded{
display:block;
}
.fordtreeview ul li{
left:5px;
margin-right:10px;
color: #333;
}
.fordtreeview > li:first-child{
display:block !important;
}
.fordtreeview li,
.fordtreeview a{
color: #333;
text-decoration:none;
cursor:pointer;
}
.fordtreeview i.glyphicon{
margin-right:5px;
}
.subactivated,
.fordtreeview > li:not(:first-child):hover{
background-color: #f5f5f5;
}
<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css'>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="filter" type="text" />
<ul class="fordtreeview list-group col-md-2" >
<li class="list-group-item"> <span class="hasSub"><i class="glyphicon glyphicon-folder-close"></i> Peter </span>
<ul class="list-group ">
<li class="list-group-item" > <a>John</a> </li>
<li class="list-group-item" ><a>Nicolas</a></li>
</ul>
</li>
<li class="list-group-item"><span class="hasSub"><i class="glyphicon glyphicon-folder-close"></i> Danial</span>
<ul class="list-group " >
<li class="list-group-item"> <a>Adam</a></li>
</ul>
</li>
</ul>
评论
0赞
Ruby
10/3/2017
这几乎是我已经拥有的,但不是我想要的。我想要的是,如果我搜索“彼得”并且“彼得”有孩子,我希望能够扩展“彼得”和他的孩子是谁。
1赞
C Van
10/20/2017
#2
好的:)只添加
else if ($(this).text().search(new RegExp(filter, "i")) < 0) {
if(!$(this).parent().parent().is('li')){
$(this).css("visibility", "hidden");
$(this).fadeOut();
}
}
评论
nextUntil