У меня есть глубоко вложенный список (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>
я искал, но я не могу понять, как сохранить это дети видимые и открыть, если у него есть.
Примечание: вам не нужно повторно использовать код, который я разместил здесь, вы можете опубликовать лучшую, более гибкую реализацию, если сможете.
Вы, вероятно, хотите, чтобы остановить проверку элементов, как только вы найдете матч RegExp. Готов поспорить, вы можете переписать свою функцию так, как хотите, используя 'nextUntil': https://api.jquery.com/nextUntil/ – jmargolisvt
Можете ли вы показать мне рабочий пример? – Ruby