javascript - 过滤多级列表

标签 javascript nested-lists fuzzy-search jquery-filter

我有一个深度嵌套的列表(10 层),我想过滤该列表,以便获得 <li>我搜索过,如果是 <li>我也想给他们看 child ,这是一个代码示例...

$(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>我搜索过,但我不知道如何让它的 child 可见并打开(如果他有的话)。

注意:您不必重复使用我在此处发布的代码,如果可以的话,您可以发布更好、更灵活的实现。

最佳答案

好的:)仅添加

         else if ($(this).text().search(new RegExp(filter, "i")) < 0) {

            if(!$(this).parent().parent().is('li')){
                $(this).css("visibility", "hidden");
                $(this).fadeOut();
            }

        } 

关于javascript - 过滤多级列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41663080/

相关文章:

javascript - 防止中键单击按钮在 FIREFOX 中打开新选项卡不起作用

javascript - 我希望 div 的背景图片应该自动更改

c# - C# 中的列表列表 - 将多种数据类型组合成一个主列表?

r - R中的部分字符串匹配并修剪字符

javascript - 日期差异并使用 JS 插入同一数组

javascript - 第一次关闭div,10分钟后不会再出现

Javascript:操作列表的列表

python - 如何使用列表列表的特定部分的统计信息

python - 优化两个列表之间的元素明智的模糊匹配

string-matching - 一种更好的变长字符串相似度排序算法