javascript - Switch 语句不作为函数运行
问题描述
我正在尝试创建一个 switch 语句来过滤表上过滤器的所有潜在选项,但是当我在搜索栏中键入任何内容时,它无法识别这些情况。我不能对过滤器使用 if...else 语句,因为我需要过滤器一起运行,而不是一个而不是另一个。我尝试更改变量的名称,以更清楚地表明我为每列指定一个 var 但没有这样的运气。任何见解将不胜感激!
var Caps = event.target.value.toUpperCase();
var Hyphen = event.target.value.replace(/[-]/g, "");
var rows = document.querySelector("#Catalogue").rows;
var firstCol = rows[i].cells[0].textContent.replace(/[-]/g, '');
var thirdCol = rows[i].cells[2].textContent.replace(/[-]/g, '');
var ColOne = rows[i].cells[0].textContent.toUpperCase();
var ColThree = rows[i].cells[2].textContent.toUpperCase();
function filterTable(event) {
for (var i = 1; i < rows.length; i++)
{if
(switch(true){
case (ColThree.indexOf(Caps) > -1 || thirdCol.indexOf(Hyphen) > -1):
rows[i].style.display = ""
break;
case (ColOne.indexOf(Caps) > -1 || firstCol.indexOf(Hyphen) > -1):
rows[i].style.display = "";
break;
case (ColOne.indexOf(Caps) > -1 && firstCol.indexOf(Hyphen) > -1):
rows[i].style.display = "";
break;
case (ColThree.indexOf(Caps) > -1 && thirdCol.indexOf(Hyphen) > -1):
rows[i].style.display = "";
})
else{
rows[i].style.display = "none"
}
}
}
document.querySelector('#myInput').addEventListener('keyup', filterTable,
false);
解决方案
这里有很多错误:
- 您使用事件回调变量将变量定义为全局变量(Caps 和 al)
- 您使用循环外的索引 i 将变量定义为全局变量(firstCol 和 al)
- 您不能在 if 语句中使用 switch 语句(switch 旨在在给定 var 的可能值的情况下提供替代方案,并避免 else if 级联)
一种方法可能是:
// Edit : rows query can be done only once to save time
let rows = document.querySelectorAll('tr.items'); // or much precise query if needed
function check(event) {
let caps = event.target.value.toUpperCase();
let hyphen = caps.replace(/[-]/g, ""); // Edit : caps + hyphen will work
// Browse all rows to check if input matching and hide/show
// Fortunately row.textContent yields all texts values :)
for(let i = 0; i < rows.length; i++) {
let row = rows[i];
// test caps length to allow revert to all hidden when no text to match
if(caps.length && (row.textContent.indexOf(caps) >= 0 || row.textContent.indexOf(hyphen) >= 0)) {
row.style.display = null;
break; // process next row
}
row.style.display = 'none'; // Hide row (avoid an else)
}
}
document.getElementById('my-input').addEventListener('keyup', check, true);
table {
width:100%;
border-collapse: collapse
}
th, td {
border: 1px solid #000;
}
<p>Type here : <input type="text" id="my-input"></p>
<table>
<tr><th>Id</th><th>Row1</th><th>Row2</th></tr>
<tr class="items" style="display:none"><td>001</td><td>FOO</td><td>BAR</td></tr>
<tr class="items" style="display:none"><td>002</td><td>GOO</td><td>CAR</td></tr>
</table>
默认情况下,行是隐藏的,就像我假设的脚本一样。项目值为 001、002、FOO、BAR、GOO、CAR。只是玩它。
好消息是您可以访问整行的 textContent 而无需查看单个 td,从而节省了很多时间。
推荐阅读
- javascript - 为什么我无法访问此对象的数据属性?
- sql - on 子句如何在 Google BigQuery 中加入
- python-3.x - 如何从数据框元素构建 url?
- bash - Shell 脚本:重定向 STDERR 显示实际脚本
- antlr4 - IntelliJ 中 ANTLR4 分析器显示的 DFA 缓存未命中是什么?
- matlab - 如何在matlab中获取/查看结果级数函数/系统的图?
- python-3.x - 在 Tensorflow v1.14 中恢复保存的模型
- python - 情感识别数据集创建
- excel - 如果出现错误,如何在 excel 中突出显示整行 =N/A
- java - 终止在 Kubernetes 的多容器 pod 中如何工作?