我正在使用javascript通过两种方法搜索html表:类别(选择选项下拉菜单)和搜索栏(文本输入)。
我正在使用以下脚本,它在chrome中运行正常,但不是:
function _filter(row) {
var input = document.getElementById("searchInput");
var category = row.getElementsByTagName('td')[0].textContent;
var filter = input.value.toUpperCase();
var text = row.textContent.toLowerCase(), val = _input.value.toLowerCase();
row.style.display = text.indexOf(val) === -1 ? 'none' : ((filter === '' || category.includes(filter)) && 'table-row');
}
所以我如下将includes
更改为indexOf
。
function _filter(row) {
var input = document.getElementById("searchInput");
var category = row.getElementsByTagName('td')[0].textContent;
var filter = input.value.toUpperCase();
var text = row.textContent.toLowerCase(), val = _input.value.toLowerCase();
row.style.display = text.indexOf(val) === -1 ? 'none' : ((filter === '' || category.indexOf(filter)) && 'table-row');
这是有效的,但是当我退格字母或选择清除时,该表将返回整个表的所有行,而不考虑当前选择的“类别”。使用包含时不会发生这种情况。似乎不再需要使用getElementsByTagName [0]数组-这应该意味着仅搜索第一列(列出类别),而不搜索表的实际内容。有人可以帮忙吗?谢谢!
根据@ Deepak-MSFT的建议。
将有帮助的评论作为答案。
一件事。
[
category.indexOf(filter)
应为category.indexOf(filter) !== -1
。由于
indexOf
可以返回0
,因此将其视为false
。请参阅]的“检查事件”部分>
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf