我创建了一个包含HTML的表,并希望集成一个搜索框,可以搜索4列(name,name2,last_name,last_name2)。我试图找到1列,但写完后,下一列没有显示任何内容
例如我想:
find name and last_name
find name2 and last_name2
find last_name and name2
find name and last_name and name2
换句话说,无论顺序如何,按下“SPACE”键后都没有显示结果。
这是我的问题:
<input type="text" id="filter" />
<table id="table">
<tr>
<td>foo</td>
<td>1</td>
</tr>
<tr>
<td>bar</td>
<td>2</td>
</tr>
<tr>
<td>some</td>
<td>3</td>
</tr>
<tr>
<td>other</td>
<td>4</td>
</tr>
</table>
这是我的Javascript:
// Function
function filterTable(value) {
if (value != "") {
$("#table tbody>tr").hide();
$("#table td:contains-ci('" + value + "')").parent("tr").show();
} else {
$("#table tbody>tr").show();
}
}
// jQuery expression for case-insensitive filter
$.extend($.expr[":"], {
"contains-ci": function (elem, i, match, array) {
return (elem.textContent || elem.innerText || $(elem).text() || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
// Event listener
$('#filter').on('keyup', function () {
filterTable($(this).val());
});
请有人知道如何解决这个问题?
答案 0 :(得分:1)
如果您输入多个单词,则必须单独过滤每个单词。否则,您正在寻找具有整个空格分隔字符串的字段。
这会拆分搜索字符串,然后显示与其中任何一个匹配的行。
// Function
function filterTable(value) {
if (value != "") {
$("#table td:contains-ci('" + value + "')").parent("tr").show();
}
}
// jQuery expression for case-insensitive filter
$.extend($.expr[":"], {
"contains-ci": function (elem, i, match, array) {
return (elem.textContent || elem.innerText || $(elem).text() || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
// Event listener
$('#filter').on('keyup', function () {
if ($(this).val() == '') {
$("#table tbody > tr").show();
} else {
$("#table > tbody > tr").hide();
var filters = $(this).val().split(' ');
filters.map(filterTable);
}
});