Element UI 表格中實現(xiàn)搜索關(guān)鍵字高亮顯示功能
在數(shù)據(jù)展示類應(yīng)用中,搜索功能是提升用戶體驗的關(guān)鍵模塊,而關(guān)鍵字高亮則能讓搜索結(jié)果更加直觀醒目。本文將詳細介紹如何在 Element UI 框架中實現(xiàn)表格數(shù)據(jù)的搜索與關(guān)鍵字高亮功能,并結(jié)合樹形表格的特性提供完整解決方案。
一、功能實現(xiàn)背景與核心需求
當(dāng)表格中存在大量數(shù)據(jù)時,用戶需要通過搜索快速定位目標內(nèi)容。關(guān)鍵字高亮的核心價值在于:
- 明確標識搜索結(jié)果的位置,減少用戶視覺掃描成本
- 增強交互反饋,讓搜索操作更具即時性
- 提升數(shù)據(jù)可讀性,尤其是在復(fù)雜表格結(jié)構(gòu)中
結(jié)合用戶提供的代碼,我們需要實現(xiàn)以下核心功能:
- 搜索輸入框的雙向綁定與事件監(jiān)聽
- 表格數(shù)據(jù)中指定列的關(guān)鍵字匹配
- 匹配文本的樣式高亮處理
- 樹形表格結(jié)構(gòu)下的遞歸高亮處理
二、核心代碼實現(xiàn)與解析
1. 搜索組件與表格結(jié)構(gòu)
首先看用戶提供的基礎(chǔ)代碼結(jié)構(gòu),搜索輸入框與表格的集成方式:
<el-form-item label="搜索內(nèi)容:">
<el-input v-model="searchForm.searchContent" placeholder="請輸入搜索內(nèi)容"></el-input>
</el-form-item>
<div class="table-container">
<el-table :data="visibleTableData" border style="width: 99%;" max-height="650px"
:tree-props="{ children: 'details' }" row-key="id" @selection-change="handleSelectionChange">
<!-- 表格列定義... -->
<el-table-column align="center" label="資料內(nèi)容" prop="content">
<template #default="scope">
<span v-html="highlightText(scope.row.content, searchKeyword)"></span>
</template>
</el-table-column>
<!-- 其他需要高亮的列... -->
</el-table>
</div>關(guān)鍵點解析:
- 通過
v-model實現(xiàn)搜索輸入框與searchForm.searchContent的雙向綁定 - 表格使用
:tree-props配置樹形結(jié)構(gòu),支持父子節(jié)點嵌套 - 需要高亮的列通過
v-html渲染高亮后的文本,結(jié)合highlightText方法處理
2. 關(guān)鍵字高亮核心方法
下面是 highlightText 方法的完整實現(xiàn),建議添加到 Vue 實例的 methods 中:
methods: {
// 關(guān)鍵字高亮處理方法
highlightText(text, keyword) {
// 處理空值或非字符串類型
if (!text || typeof text !== 'string') return text;
if (!keyword || typeof keyword !== 'string') return text;
// 轉(zhuǎn)義正則表達式特殊字符
const escapedKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// 創(chuàng)建不區(qū)分大小寫的全局匹配正則
const regex = new RegExp(escapedKeyword, 'gi');
// 使用span包裹匹配內(nèi)容并添加高亮樣式
return text.replace(regex, (match) => {
return `<span class="highlight">${match}</span>`;
});
},
// 搜索事件處理
handleSearch() {
// 獲取搜索關(guān)鍵字
this.searchKeyword = this.searchForm.searchContent.trim();
// 執(zhí)行搜索過濾(此處需根據(jù)實際數(shù)據(jù)結(jié)構(gòu)實現(xiàn))
this.filterTableData();
},
// 表格數(shù)據(jù)過濾方法
filterTableData() {
if (!this.searchKeyword) {
// 清空搜索時顯示全部數(shù)據(jù)
this.visibleTableData = [...this.originalTableData];
return;
}
// 遞歸過濾樹形表格數(shù)據(jù)(示例邏輯,需根據(jù)實際數(shù)據(jù)結(jié)構(gòu)調(diào)整)
this.visibleTableData = this.originalTableData.filter(item => {
return this.checkRowMatch(item, this.searchKeyword);
});
},
// 檢查行數(shù)據(jù)是否匹配搜索條件
checkRowMatch(row, keyword) {
// 檢查當(dāng)前行需要高亮的字段
const fields = ['content', 'projectName', 'form', 'receiverName'];
for (const field of fields) {
if (row[field] && row[field].toString().includes(keyword)) {
return true;
}
}
// 遞歸檢查子節(jié)點
if (row.details && row.details.length > 0) {
for (const child of row.details) {
if (this.checkRowMatch(child, keyword)) {
return true;
}
}
}
return false;
}
}3. 高亮樣式定制
為了讓高亮效果更明顯,需要在 CSS 中添加高亮樣式:
.highlight {
background-color: #ffeb3b; /* 黃色背景,可自定義 */
color: #333;
font-weight: 500;
padding: 0 2px;
border-radius: 2px;
}三、總結(jié)與擴展方向
通過上述方法,我們實現(xiàn)了 Element UI 表格中的關(guān)鍵字高亮功能,核心在于利用正則表達式替換匹配文本,并結(jié)合樹形結(jié)構(gòu)的遞歸處理。

到此這篇關(guān)于Element UI 表格中實現(xiàn)搜索關(guān)鍵字高亮顯示功能的文章就介紹到這了,更多相關(guān)Element UI 搜索關(guān)鍵字高亮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue和SpringBoot之間傳遞時間的方法實現(xiàn)
本文主要介紹了Vue和SpringBoot之間傳遞時間的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
vue項目如何使用three.js實現(xiàn)vr360度全景圖片預(yù)覽
這篇文章主要介紹了vue項目如何使用three.js實現(xiàn)vr360度全景圖片預(yù)覽,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue使用Echarts實現(xiàn)大屏可視化布局示例詳細講解
這篇文章主要介紹了Vue使用Echarts實現(xiàn)大屏可視化布局示例,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01

