使用 Javascript 进行正确的嵌套搜索
Proper Nested Search using Javascript
我正在使用 list.js 来搜索、排序和过滤我的菜单项。我在嵌套 <ul>
上使用搜索功能时遇到问题,无法避免。
问题是当我在子 <ul>
元素中搜索文本时,returns 子 <ul>
.[=19 中的整个 <li>
=]
有什么我遗漏的吗?
JSFiddle:https://jsfiddle.net/7ukgqmsp/
这是示例代码;
var options = {
valueNames: ['demo-class']
};
var userList = new List('test', options);
<script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.2.0/list.min.js"></script>
<div id="test">
<input class="search" placeholder="Search" />
<ul class="list">
<li>
<a class="demo-class" href="#" title="1">1</a>
</li>
<li>
<a class="demo-class" href="#" title="2">2</a>
</li>
<ul class="list">
<li>
<a class="demo-class" href="#" title="3">3</a>
</li>
<li>
<a class="demo-class" href="#" title="4">4</a>
</li>
<li>
<a class="demo-class" href="#" title="5">5</a>
</li>
<li>
<a class="demo-class" href="#" title="6">6</a>
</li>
</ul>
<li>
<a class="demo-class" href="#" title="7">7</a>
</li>
</ul>
</div>
不幸的是,list.js 目前似乎不支持搜索嵌套列表(请参阅 the Github issue)。
但是,您可以通过为嵌套列表提供另一个 class、创建单独的 List.js 并递归搜索来创建自定义解决方案?
似乎还没有实现这种功能,作者也没有添加它的计划。
为什么不自己制作原始 jQuery 解决方案?
$('.search-box').on('keyup', function(){
var searchTerm = $(this).val().toLowerCase();
$('.list li').each(function(){
if ($(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0 || searchTerm.length < 1) {
$(this).show();
} else {
$(this).hide();
}
}); });
正如@Sam 和@David 所说,这是库问题。
如果有人正在使用或想要使用具有嵌套功能的这个库,可以在项目的 GitHub 页面下找到它。
Github - List.js with nested functionality
用法示例;
$(function() {
var options = {
valueNames: ['searchable'],
item: '<li><a class="searchable" href="#"></a></li>',
nestedSearch: true
};
var userList = new List('users', options);
})
<div class="service-list">
<div id="users">
<input class="search" placeholder="Search" />
<dl class="accordion" data-accordion>
<dd>
<div id="panel1" class="content">
<ul class="list first-level">
<li>
<a href="#" class="searchable link-first-level">Card Services Summary</a>
<ul class="list">
<li>
<a class="searchable" href="#">Permanent Access Card</a>
<ul class="list last-level">
<li><a class="searchable" href="#">Apply for new</a></li>
<li><a class="searchable" href="#">Apply for replacement</a></li>
<li><a class="searchable" href="#">Cancel current</a></li>
</ul>
</li>
<li>
<a class="searchable" href="#">Permanent Identity Card</a>
<ul class="list last-level">
<li><a class="searchable" href="#">Apply for new</a></li>
<li><a class="searchable" href="#">Apply for replacement</a></li>
<li><a class="searchable" href="#">Cancel current</a></li>
</ul>
<li>
<a class="searchable" href="#">Temporary Access Card</a>
<ul class="list last-level">
<li><a class="searchable" href="#">Apply for new</a></li>
<li><a class="searchable" href="#">Apply for replacement</a></li>
<li><a class="searchable" href="#">Cancel current</a></li>
</ul>
<li>
<a class="searchable" href="#">Free Zone Card</a>
<ul class="list last-level">
<li><a class="searchable" href="#">Apply for new</a></li>
<li><a class="searchable" href="#">Apply for duplicate</a></li>
<li><a class="searchable" href="#">Apply for replacement</a></li>
<li><a class="searchable" href="#">Amend current</a></li>
<li><a class="searchable" href="#">Cancel current</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</dd>
</dl>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="https://raw.githubusercontent.com/bilalfastian/list.js/feature/nested-search/dist/list.min.js"></script>
我正在使用 list.js 来搜索、排序和过滤我的菜单项。我在嵌套 <ul>
上使用搜索功能时遇到问题,无法避免。
问题是当我在子 <ul>
元素中搜索文本时,returns 子 <ul>
.[=19 中的整个 <li>
=]
有什么我遗漏的吗?
JSFiddle:https://jsfiddle.net/7ukgqmsp/
这是示例代码;
var options = {
valueNames: ['demo-class']
};
var userList = new List('test', options);
<script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.2.0/list.min.js"></script>
<div id="test">
<input class="search" placeholder="Search" />
<ul class="list">
<li>
<a class="demo-class" href="#" title="1">1</a>
</li>
<li>
<a class="demo-class" href="#" title="2">2</a>
</li>
<ul class="list">
<li>
<a class="demo-class" href="#" title="3">3</a>
</li>
<li>
<a class="demo-class" href="#" title="4">4</a>
</li>
<li>
<a class="demo-class" href="#" title="5">5</a>
</li>
<li>
<a class="demo-class" href="#" title="6">6</a>
</li>
</ul>
<li>
<a class="demo-class" href="#" title="7">7</a>
</li>
</ul>
</div>
不幸的是,list.js 目前似乎不支持搜索嵌套列表(请参阅 the Github issue)。
但是,您可以通过为嵌套列表提供另一个 class、创建单独的 List.js 并递归搜索来创建自定义解决方案?
似乎还没有实现这种功能,作者也没有添加它的计划。
为什么不自己制作原始 jQuery 解决方案?
$('.search-box').on('keyup', function(){
var searchTerm = $(this).val().toLowerCase();
$('.list li').each(function(){
if ($(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0 || searchTerm.length < 1) {
$(this).show();
} else {
$(this).hide();
}
}); });
正如@Sam 和@David 所说,这是库问题。
如果有人正在使用或想要使用具有嵌套功能的这个库,可以在项目的 GitHub 页面下找到它。
Github - List.js with nested functionality
用法示例;
$(function() {
var options = {
valueNames: ['searchable'],
item: '<li><a class="searchable" href="#"></a></li>',
nestedSearch: true
};
var userList = new List('users', options);
})
<div class="service-list">
<div id="users">
<input class="search" placeholder="Search" />
<dl class="accordion" data-accordion>
<dd>
<div id="panel1" class="content">
<ul class="list first-level">
<li>
<a href="#" class="searchable link-first-level">Card Services Summary</a>
<ul class="list">
<li>
<a class="searchable" href="#">Permanent Access Card</a>
<ul class="list last-level">
<li><a class="searchable" href="#">Apply for new</a></li>
<li><a class="searchable" href="#">Apply for replacement</a></li>
<li><a class="searchable" href="#">Cancel current</a></li>
</ul>
</li>
<li>
<a class="searchable" href="#">Permanent Identity Card</a>
<ul class="list last-level">
<li><a class="searchable" href="#">Apply for new</a></li>
<li><a class="searchable" href="#">Apply for replacement</a></li>
<li><a class="searchable" href="#">Cancel current</a></li>
</ul>
<li>
<a class="searchable" href="#">Temporary Access Card</a>
<ul class="list last-level">
<li><a class="searchable" href="#">Apply for new</a></li>
<li><a class="searchable" href="#">Apply for replacement</a></li>
<li><a class="searchable" href="#">Cancel current</a></li>
</ul>
<li>
<a class="searchable" href="#">Free Zone Card</a>
<ul class="list last-level">
<li><a class="searchable" href="#">Apply for new</a></li>
<li><a class="searchable" href="#">Apply for duplicate</a></li>
<li><a class="searchable" href="#">Apply for replacement</a></li>
<li><a class="searchable" href="#">Amend current</a></li>
<li><a class="searchable" href="#">Cancel current</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</dd>
</dl>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="https://raw.githubusercontent.com/bilalfastian/list.js/feature/nested-search/dist/list.min.js"></script>