在網站上顯示數據時,重要的是提供使用戶更輕松地瀏覽數據的功能。其中一項功能就是能夠對數據進行排序。
對數據進行排序是指將數據按照指定的值,按升序或降序排列。我們可以使用 JavaScript 在網站的客戶端手動處理數據排序。如果您正在開發靜態網站或消除服務器中數據排序的負擔,這尤其有用。
在本教程中,我們將使用 JavaScript 將模擬 JSON 響應中的數據顯示到 HTML 表中。我們還將包含使表格可根據表標題中的值進行排序的功能。
這是成品。單擊任意表格標題即可對表格進行相應排序。
1. 用 HTML 放置內容
compareFunction(a, b) 返回值
|
排序順序 |
---|---|
> 0 |
排序 a 之后 b
|
< 0 | 將 a 排序在 b 之前 |
=== 0 | 保持 a 和 b 的原始順序
|
來源:MDN
關于排序方法需要注意的另一件事是它會改變它所操作的原始數組。這意味著它改變了我們原始數組的值。
我們可以通過使用擴展語法來避免改變原始數組[…]
現在我們可以創建排序函數了。這就是我們的排序函數的邏輯:
-
清除tableContent元素中的內容
根據所選參數和方向對數據進行排序
使用
getTableContent
函數將排序后的數據附加到我們的 tableContent
const sortData = (data, param, direction = "asc") => { tableContent.innerHTML = ''; const sortedData = direction == "asc" ? [...data].sort(function (a, b) { if (a[param] < b[param]) { return -1; } if (a[param] > b[param]) { return 1; } return 0; }) : [...data].sort(function (a, b) { if (b[param] < a[param]) { return -1; } if (b[param] > a[param]) { return 1; } return 0; }); getTableContent(sortedData); };
登錄后復制
我們的排序函數需要三個參數:
data
:待排序的數組
param
:用于對數組進行排序的值
direction
:按升序或降序對數組進行排序。默認參數值設置為“asc”。
我們通過將innerHTML 設置為空白字符串來清除tableContent 元素中的內容。然后,我們使用 .sort()
方法和 direction
參數來確定數據應如何排序。我們反轉比較函數以便按降序排序。通過這種方式使用比較函數,我們可以對數據進行排序,而不管值的類型(字符串、整數、浮點數等)
最后,我們將 sortedData
作為表內容中的新值傳遞。
現在,我們將排序函數傳遞到表格按鈕的單擊事件偵聽器中,并處理切換排序方向。
window.addEventListener("load", () => { getTableContent(response.pokedata); [...tableButtons].map((button) => { button.addEventListener("click", (e) => { if (e.target.getAttribute("data-dir") == "desc") { sortData(response.pokedata, e.target.id, "desc"); e.target.setAttribute("data-dir", "asc"); } else { sortData(response.pokedata, e.target.id, "asc"); e.target.setAttribute("data-dir", "desc"); } }); }); });
登錄后復制
在此函數中,我們通過在按鈕上設置 data-dir
屬性來處理切換以確定排序方向。我們還將更新 CSS 以根據排序方向在按鈕旁邊顯示一個圖標:
th button::after { position: absolute; right: 0.5rem; } th button[data-dir="asc"]::after { content: url("data:image/svg+xml,%3Csvg xmlns='https://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpolygon points='0, 0 8,0 4,8 8' fill='%23818688'/%3E%3C/svg%3E"); } th button[data-dir="desc"]::after { content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpolygon points='4 0,8 8,0 8' fill='%23818688'/%3E%3C/svg%3E"); }
登錄后復制
我們不想讓圖標顯示在所有以前單擊的按鈕上,因此我們將定義一個 resetButtons
函數,該函數刪除任何未單擊的按鈕上的 data-dir 屬性。
const resetButtons = (event) => { [...tableButtons].map((button) => { if (button !== event.target) { button.removeAttribute("data-dir"); } }); };
登錄后復制
我們會將該函數傳遞到按鈕事件偵聽器中,以便在單擊新按鈕時重置以前的按鈕
window.addEventListener("load", () => { getTableContent(response.pokedata); [...tableButtons].map((button) => { button.addEventListener("click", (e) => { resetButtons(e); if (e.target.getAttribute("data-dir") == "desc") { sortData(response.pokedata, e.target.id, "desc"); e.target.setAttribute("data-dir", "asc"); } else { sortData(response.pokedata, e.target.id, "asc"); e.target.setAttribute("data-dir", "desc"); } }); }); });
登錄后復制
結論
這樣,我們就完成了!我們僅使用普通 JavaScript 創建了一個可排序的表格!
以上就是創建具有排序功能的啟用 JavaScript 的 HTML 表的詳細內容,更多請關注www.92cms.cn其它相關文章!
標簽:html 創建 功能 啟用 排序網友整理
注冊時間:
網站:5 個 小程序:0 個 文章:12 篇
-
51998
網站
- 12
小程序
-
1030137
文章
-
747
會員
- 各百科-專業百科問答知識名網站 m.geelcn.com
- 免費軟件,綠色軟件園,手機軟件下載,熱門游戲下載中心-中當網 m.deelcn.com
- 魔扣科技 www.ylptlb.cn
- 體育新聞_國際體育資訊_全球體育賽事-中名網 www.feelcn.com/tiyu/tiyuxinwen/
- 食品安全_健康飲食_舌尖上的安全-中名網 www.feelcn.com/shenghuo/shipinanquan/
- 中合網 www.heelcn.com
- 中當網 www.deelcn.com
- 魔扣網站維護代運營 www.ylptlb.cn/tg
- 中合網-健康養生知識科普名站 m.heelcn.com
- 各百科 www.geelcn.com
- 民以食為天 離線人臉識別助力打造智慧食堂 08-20
- 青桔單車發布3款新車 已進入150個城市 08-13
- 民間大神用Win7毛玻璃UI風格改造Win10:情懷滿滿 08-06
- 網站標題是否可以修改?怎么改不影響網站權重? 11-19
- 關于網站標題和正文的匹配度分析 09-29
- 從滾石、華納到環球,三個關鍵詞讀懂網易云為何成版權方最愛 08-12
- 天眼被注冊為煙草商標,中國控煙協會要求嚴查 08-13
- 深圳實現5G獨立組網全覆蓋 已累計建設5G基站超4.6萬個 08-17
- 滴滴App內嵌買車服務 已在十余城上線 08-06
- 關鍵詞的密度要結合頁面版式來調整 11-28