[英]Filter/Search A Table Using Partial Match - HTML & Javascript
我有一個 HTML 表,我正在嘗試使用模糊搜索和部分匹配進行過濾。 我嘗試了許多 JS 庫,但它們似乎沒有同時提供這兩種過濾器選項。 我嘗試過 FuzySort.js、FlexSearch.js 等。 有誰知道可以做到這一點的圖書館?
基礎:
要求:
預期結果:如果...
當前結果:
當前代碼
function myFunction() {
var input, filter, table, tr, td, i, txtValue;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td")[1];
if (td) {
txtValue = td.textContent || td.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
這是我的 JSFiddle: https://jsfiddle.net/h7p8bzs0/
非常感謝任何幫助或指導。 有沒有人對什么庫可以實現這些結果有任何建議,或者我如何調整上面的 JS 代碼來做到這一點?
Ps:對不起,我是新手,對使用 JSON、Node.JS、實際數據庫等選項感到不知所措。
您可能想嘗試以下 Javascript:
function myFunction() {
const input = document.getElementById("myInput");
const filters = input.value.toUpperCase().split(' '); // create several filters separated by space
const table = document.getElementById("myTable");
const tr = table.getElementsByTagName("tr");
for (let i = 0; i < tr.length; i++) {
const td = tr[i].getElementsByTagName("td")[1];
if (td) {
const txtValue = td.textContent || td.innerText;
tr[i].style.display = "none"; // hide each row
for (filter of filters) { // add the rows matching a filter
if (txtValue.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = "";
}
}
}
}
}
這里發生的是我們創建了多個過濾字符串來匹配,用空格分隔。 只要我們有至少一個過濾器,我們就會隱藏每一行,如果它至少匹配一個過濾器,我們會再次添加它。
哦,我對您的變量進行了一些重構:我們事先不需要聲明符,我們希望將它們作為 let 或 const 使它們不是全局的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.