[英]jQuery search filter show the list item header
我有以下清单
<ul id="fromList">
<li class="header">-ABC-</li>
<li class="item">123</li>
<li class="item">258</li>
<li class="item">189</li>
<li class="item">545</li>
<li class="header">-CDE-</li>
<li class="item">789</li>
<li class="item">215</li>
<li class="item">897</li>
<li class="item">999</li>
<li class="header">-EFG-</li>
<li class="item">701</li>
<li class="item">566</li>
<li class="item">511</li>
</ul>
搜索项目时,它应显示列表项标题
例如,当我搜索'9'
应该表明
现在我只获得搜索列表:
function filter(element) { var value = $(element).val(); $("#fromList li").each(function() { if ($(this).text().search(new RegExp(value, "i")) > -1) { $(this).show(); } else { $(this).hide(); } }); }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type='text' id='txtList' onkeyup="filter(this)" /> <ul id="fromList"> <li class="header">ABC</li> <li class="item">123</li> <li class="item">258</li> <li class="item">189</li> <li class="item">545</li> <li class="header">CDE</li> <li class="item">789</li> <li class="item">215</li> <li class="item">897</li> <li class="item">999</li> <li class="header">E</li> <li class="item">701</li> <li class="item">566</li> <li class="item">511</li> </ul>
你可以在结合.prevAll()
方法用的.first()
方法 ,以选择的头元素li
应显示:
$(this).prevAll('.header').first().show();
function filter(element) {
var value = $(element).val();
$("#fromList li").each(function () {
if ($(this).text().search(value) > -1) {
$(this).show();
$(this).prevAll('.header').first().show();
} else {
$(this).hide();
}
});
}
我建议使用不引人注目的JavaScript 。 我也缩短了你的代码。
$('#txtList').on('keyup', function () {
var value = this.value;
$('#fromList li').hide().each(function () {
if ($(this).text().search(value) > -1) {
$(this).prevAll('.header').first().add(this).show();
}
});
});
作为旁注,如果要在键入“ABC”之类的内容时排除标题,请使用.header
.not()
方法从选择中取消.header
元素:
if ($(this).not('.header').text().search(value) > -1) {
// ..
}
或者,您可以指定使用items
类对列表项进行排序,而不是使用列表中的每个项进行排序:
$('#txtList').keyup(function () {
var value = this.value;
$('#fromList li.item').each(function () {
if ($(this).text().search(value) > -1) {
$(this).show();
} else {
$(this).hide();
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.