Element UI 表格中實(shí)現(xiàn)搜索關(guān)鍵字高亮顯示功能
在數(shù)據(jù)展示類應(yīng)用中,搜索功能是提升用戶體驗(yàn)的關(guān)鍵模塊,而關(guān)鍵字高亮則能讓搜索結(jié)果更加直觀醒目。本文將詳細(xì)介紹如何在 Element UI 框架中實(shí)現(xiàn)表格數(shù)據(jù)的搜索與關(guān)鍵字高亮功能,并結(jié)合樹(shù)形表格的特性提供完整解決方案。
一、功能實(shí)現(xiàn)背景與核心需求
當(dāng)表格中存在大量數(shù)據(jù)時(shí),用戶需要通過(guò)搜索快速定位目標(biāo)內(nèi)容。關(guān)鍵字高亮的核心價(jià)值在于:
- 明確標(biāo)識(shí)搜索結(jié)果的位置,減少用戶視覺(jué)掃描成本
- 增強(qiáng)交互反饋,讓搜索操作更具即時(shí)性
- 提升數(shù)據(jù)可讀性,尤其是在復(fù)雜表格結(jié)構(gòu)中
結(jié)合用戶提供的代碼,我們需要實(shí)現(xiàn)以下核心功能:
- 搜索輸入框的雙向綁定與事件監(jiān)聽(tīng)
- 表格數(shù)據(jù)中指定列的關(guān)鍵字匹配
- 匹配文本的樣式高亮處理
- 樹(shù)形表格結(jié)構(gòu)下的遞歸高亮處理
二、核心代碼實(shí)現(xiàn)與解析
1. 搜索組件與表格結(jié)構(gòu)
首先看用戶提供的基礎(chǔ)代碼結(jié)構(gòu),搜索輸入框與表格的集成方式:
<el-form-item label="搜索內(nèi)容:">
<el-input v-model="searchForm.searchContent" placeholder="請(qǐng)輸入搜索內(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)鍵點(diǎn)解析:
- 通過(guò)
v-model實(shí)現(xiàn)搜索輸入框與searchForm.searchContent的雙向綁定 - 表格使用
:tree-props配置樹(shù)形結(jié)構(gòu),支持父子節(jié)點(diǎn)嵌套 - 需要高亮的列通過(guò)
v-html渲染高亮后的文本,結(jié)合highlightText方法處理
2. 關(guān)鍵字高亮核心方法
下面是 highlightText 方法的完整實(shí)現(xiàn),建議添加到 Vue 實(shí)例的 methods 中:
methods: {
// 關(guān)鍵字高亮處理方法
highlightText(text, keyword) {
// 處理空值或非字符串類型
if (!text || typeof text !== 'string') return text;
if (!keyword || typeof keyword !== 'string') return text;
// 轉(zhuǎn)義正則表達(dá)式特殊字符
const escapedKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// 創(chuàng)建不區(qū)分大小寫(xiě)的全局匹配正則
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í)行搜索過(guò)濾(此處需根據(jù)實(shí)際數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn))
this.filterTableData();
},
// 表格數(shù)據(jù)過(guò)濾方法
filterTableData() {
if (!this.searchKeyword) {
// 清空搜索時(shí)顯示全部數(shù)據(jù)
this.visibleTableData = [...this.originalTableData];
return;
}
// 遞歸過(guò)濾樹(shù)形表格數(shù)據(jù)(示例邏輯,需根據(jù)實(shí)際數(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é)點(diǎn)
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é)與擴(kuò)展方向
通過(guò)上述方法,我們實(shí)現(xiàn)了 Element UI 表格中的關(guān)鍵字高亮功能,核心在于利用正則表達(dá)式替換匹配文本,并結(jié)合樹(shù)形結(jié)構(gòu)的遞歸處理。

到此這篇關(guān)于Element UI 表格中實(shí)現(xiàn)搜索關(guān)鍵字高亮顯示功能的文章就介紹到這了,更多相關(guān)Element UI 搜索關(guān)鍵字高亮內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue和SpringBoot之間傳遞時(shí)間的方法實(shí)現(xiàn)
本文主要介紹了Vue和SpringBoot之間傳遞時(shí)間的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Vue?watch監(jiān)聽(tīng)使用的幾種方法
watch是由用戶定義的數(shù)據(jù)監(jiān)聽(tīng),當(dāng)監(jiān)聽(tīng)的屬性發(fā)生改變就會(huì)觸發(fā)回調(diào),這項(xiàng)配置在業(yè)務(wù)中是很常用。在面試時(shí),也是必問(wèn)知識(shí)點(diǎn),一般會(huì)用作和computed進(jìn)行比較。那么本文就來(lái)帶大家從源碼理解watch的工作流程,以及依賴收集和深度監(jiān)聽(tīng)的實(shí)現(xiàn)2022-12-12
vue下history模式刷新后404錯(cuò)誤解決方法
這篇文章主要介紹了vue下history模式刷新后404錯(cuò)誤解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Vue3偵聽(tīng)器的實(shí)現(xiàn)原理詳情
這篇文章主要介紹了Vue3偵聽(tīng)器的實(shí)現(xiàn)原理詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
VueJs與ReactJS和AngularJS的異同點(diǎn)
這篇文章主要為大家詳細(xì)介紹了VueJs與ReactJS和AngularJS的異同點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
Vue實(shí)現(xiàn)模糊查詢filter()實(shí)例詳解
因?yàn)榻赵趯W(xué)習(xí)并使用VUE,客戶有一個(gè)要求,要輸入框可模糊查詢并帶有下拉提示的應(yīng)用,數(shù)據(jù)從接口取,下面這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)模糊查詢filter()的相關(guān)資料,需要的朋友可以參考下2023-04-04
vue項(xiàng)目如何使用three.js實(shí)現(xiàn)vr360度全景圖片預(yù)覽
這篇文章主要介紹了vue項(xiàng)目如何使用three.js實(shí)現(xiàn)vr360度全景圖片預(yù)覽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue使用Echarts實(shí)現(xiàn)大屏可視化布局示例詳細(xì)講解
這篇文章主要介紹了Vue使用Echarts實(shí)現(xiàn)大屏可視化布局示例,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01

