我有两个选择输入和一个搜索字段来过滤一些div。select
输入可以像预期的那样工作。搜索字段应该显示包含搜索框中文本的div,但它只在例如“ane”而不是“Jane”时才有效。
有人能看出问题所在吗?
$(document).ready(function() {
// Hide all divs initially.
$('.col.kontaktpersoner').hide();
// Show the corresponding divs when the user types in the search field and selects a department and/or location.
$('#search-field, #departments, #locations').on('input change', function() {
var searchTerm = $('#search-field').val().toLowerCase().trim();
var department = $('#departments').val();
var location = $('#locations').val();
// Construct the selector for the corresponding divs.
var selector = '.col.kontaktpersoner';
if (department) {
selector += '.' + department;
}
if (location) {
selector += '.' + location;
}
// Find all divs that contain the search term.
var filteredDivs = $(selector).filter(':contains("' + searchTerm + '")');
// If there are no divs that contain the search term, then find all divs that contain the search term as a whole word.
if (filteredDivs.length === 0) {
filteredDivs = $(selector).filter(':contains(\\b' + searchTerm + '\\b)');
}
// If there are still no divs that contain the search term, then find all divs that contain the search term as a prefix.
if (filteredDivs.length === 0) {
filteredDivs = $(selector).filter(':contains("' + searchTerm + '%")');
}
// Show the filtered divs.
filteredDivs.show();
// Hide all other divs.
$('.col.kontaktpersoner').not(filteredDivs).hide();
});
});
个字符
1条答案
按热度按时间byqmnocz1#
你的问题是你没有比较同一个案例。
这一行:
字符串
意味着你的搜索词
Jane
变成了jane
--而且你没有任何包含jane
的行,只有Jane
。最简单的解决方案是实现一个不区分大小写的
:contains
函数,例如从这个答案正在提供更新的片段:
的数据
几个额外的注意事项:
如果你隐藏所有然后只显示你想要的,它将是原子的(显示为一个),所以你不需要
.not(filtered)
型
如果searchTerm没有出现在文本中的任何地方(你的第一次检查),那么根据定义,它也不会作为一个完整的单词或前缀出现-所以你不需要这些检查。