如何使用搜索输入过滤多级菜单

时间:2014-07-02 05:45:00

标签: javascript multi-level

难点在于菜单有很多级别(比如matrix-admin中的菜单),每个级别都很大;我应该如何根据搜索输入的值过滤菜单。

,输出应该是这样的:(http://www.jqueryrain.com/?lEMFOjZ1) 我的HTML是这样的:

<ul>
<li>xxx</li>
<li>
   <a>xxx</a>
   <ul>
      <li>
           <a>xxx</a>
           <ul>
                <li>
                   <a>xxx</a>
                   <ul></ul>
                </li>
           </ul>
      </li>
      <li>xxxx</li>
   </ul>
</li>

2 个答案:

答案 0 :(得分:3)

Demo Fiddle

$("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();
    }
});  

Onkeypress事件菜单将被过滤....如果您尝试找到孩子li,则可以看到父li ...

答案 1 :(得分:1)

你不需要jquery。

document.querySelector("#filter").addEventListener("keyup", function(e) {
  var filter = this.value;
  var count = 0;
  document.querySelectorAll("li").forEach(function(li) {
    if (filter == "") {
      li.style["display"] = "list-item";
    } else if (!li.textContent.match(filter)) {
      li.style["display"] = "none";
    } else {
      li.style["display"] = "list-item";
    }
  });
});

https://jsfiddle.net/gfe9y5o2/