【发布时间】:2017-01-15 15:55:48
【问题描述】:
我有一个嵌套很深的列表(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>,但我不知道如何保持它的孩子可见并打开(如果有的话)。
注意:您不必重复使用我在此处发布的代码,如果可以,您可以发布更好、更灵活的实现。
【问题讨论】:
-
一旦找到匹配的正则表达式,您可能希望停止检查元素。我敢打赌,您可以使用
nextUntil:api.jquery.com/nextUntil 以您想要的方式重写您的函数 -
你能给我看一个工作的例子吗?
标签: javascript nested-lists fuzzy-search jquery-filter