簡體   English   中英

如何使搜索功能通過我的 html 表運行,由本地存儲制成?

[英]How do I make a search function that runs through my html table, made from local storage?

我有以下代碼從本地存儲中獲取數組並將其放入表中。

//Function creates table for employeeList
function buildTable(data) {
    // creates variable "table"
    let table = document.createElement("table");

        // Create table head and body
        table.appendChild(document.createElement("thead"));
        table.appendChild(document.createElement("tbody"));

        let fields = Object.keys(data[0]);
        let headRow = document.createElement("tr");
        fields.forEach(function (field) {
            let headCell = document.createElement("th");
            headCell.textContent = field;
            headRow.appendChild(headCell);
        });
        table.querySelector("thead").appendChild(headRow);
        data.forEach(function (object) {
            let row = document.createElement("tr");
            fields.forEach(function (field) {
                let cell = document.createElement("td");
                cell.textContent = object[field];
                if (typeof object[field] == "number") {
                    cell.style.textAlign = "left";
                }
                row.appendChild(cell);
            });
            table.querySelector("tbody").appendChild(row);
        });
        return table;

    }

document.querySelector("#employees").appendChild(buildTable(employeeList));

放入HTML頁面,如下圖: https : //i.imgur.com/GvbT45A.png

我想創建一個搜索/過濾功能來搜索列表中的名稱。 如果我寫了一個以“S”開頭的名字,所有不以 S 開頭的名字都應該被過濾掉。 我嘗試了以下代碼:

function searchTable(){
    // Declare variables
    var input, filter, table, tr, td, i;
    input = document.getElementById("search");
    filter = input.value.toUpperCase();
    table = document.getElementsByTagName("table");
    tr = table.getElementsByTagName('tr');

    // Loop through all table rows, and hide those who don't match the search query
    for (i = 0; i < tr.length; i++) {
        td = tr[i].getElementsByTagName("td") ;
        for(j=0 ; j<td.length ; j++)
        {
            let tdata = td[j] ;
            if (tdata) {
                if (tdata.innerHTML.toUpperCase().indexOf(filter) > -1) {
                    tr[i].style.display = "";
                    break ;
                } else {
                    tr[i].style.display = "none";
                }
            }
        }
    }
}

當我將代碼導入 HTML 並使用以下輸入標記時: <input type="text" id="search" placeholder="Type to search">它不會搜索。 我曾嘗試為這里的許多人在堆棧溢出方面取得成功,他們遇到了同樣的問題,但他們都沒有工作。 我認為這是因為我的 HTML 表是由數組或類似的東西組成的。

我希望你們能幫助我解決這個問題,因為我對 Javascript 很陌生。 如果您需要更多信息,請告訴我!

我的數據對象:

//Employee Database "Localstorage"
if(localStorage.getItem("Employee") == null) {
    var employeeList = [];
    employeeList.push (new Employee("Simon", "Male", "HR", 1999, "SM1@cbs.dk"));
    employeeList.push (new Employee("Mads", "Male","IT", 1999,  "MS@cbs.dk"));
    employeeList.push (new Employee("Jessica", "Female", "Sales",1998, "JT@cbs.dk"));
    employeeList.push (new Employee("Benjamin", "Male","IT", 1997, "BN@cbs.dk"));

    var employeeListString = JSON.stringify(employeeList);
    localStorage.setItem("Employee", employeeListString);
    document.querySelector("#employees").appendChild(buildTable(employeeList));
} else {
    var employeeList = JSON.parse(localStorage.getItem("Employee"));
}

在您的 searchTable() 函數中,您使用 document.getElementsByTagName() 初始化表格,但 getElementsByTagName() 返回 HTMLCollection,因此如果您的文檔中只有一個表格元素,請嘗試設置:table = document.getElementsByTagName("table")[ 0]。 tr一樣。 還發布您的數據對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM