vue搜索高亮popsearch組件的實(shí)現(xiàn)示例
背景
最近項(xiàng)目中需要制作一個搜索高亮的組件(如下圖展示),今天分享一下這個組件功能。希望能拋磚引玉,給大家?guī)韱l(fā)。

需求功能
我們需要一個輸入框,比如用來搜索網(wǎng)站的所有菜單,這個時候搜索結(jié)果高亮顯示。
1.搜索關(guān)鍵詞篩選;
2.關(guān)鍵詞鍵入篩選;
3.關(guān)鍵詞列表高亮;
設(shè)計(jì)開發(fā)
先說一下我的開發(fā)環(huán)境版本:

- node: v11.3.0
- npm: 6.4.1
- vue:2.5.11
如果不是以上版本也沒關(guān)系,今日分享的思路,相信你可以自己造出來~
1.先做html排版,簡單的用position相對定位來做哈:
<div class='popcover'>
<input type="text" class="z-input" placeholder="請輸入" v-model="data">
<div class="popcoverbox">
<p v-if="!list.filter(one=>one.name.includes(data)).length"> 無數(shù)據(jù) </p>
<ul>
<li v-for="one in list.filter(one=>one.name.includes(data))" :key="one.id" v-html="searchNamefilter(one.name)" ></li>
</ul>
</div>
</div>2.給html賦上對應(yīng)的css(sass):
.z-input{
outline: none;
line-height: 30px;
border: 1px solid #ddd;
border-radius: 3px;
padding: 0 10px;
&:focus{
border-color: #1676ff;
+ .popcoverbox{
display: block;
}
}
}
.popcover{
position: relative;
}
.popcoverbox{
display: none;
position: absolute;
top: 32px;
left: 0;
min-width: 200px;
min-height: 30px;
background: #fff;
border: 1px solid #ddd;
border-radius: 3px;
box-shadow: 3px 4px 3px #eee;
background: #fff;
line-height: 30px;
padding: 0;
p{
color: #999;
padding: 0;
margin: 0;
border: 0;
text-indent: 10px;
}
ul{
padding: 0;
margin: 0;
border: 0;
li{
margin: 0;
border: 0;
box-sizing: border-box;
width: 100%;
text-indent: 10px;
cursor: pointer;
&:hover{
color: #333;
background-color: #eee;
}
&.hover{
color: #1676ff;
background-color: #e8f1ff;
}
}
}
}3.給出變量定義:
data:"",
list:[
{
id: 0,
name:'張三'
},
{
id: 1,
name:'趙四'
},
{
id: 2,
name:'周四'
},
{
id: 3,
name:'鄭三'
},
]
}4.方法高亮定義:
// 搜索關(guān)鍵詞高亮
searchNamefilter(name){
if(!name)return
let key = this.data;
const reg = new RegExp(key, 'ig');
return name.replace(reg, `<span style="color:red">${key}</span>`)
},本組件只用于學(xué)習(xí)交流哈!暫時沒有定義父級傳入?yún)?shù)哈,效果如下:

寫在最后
到此這篇關(guān)于vue搜索高亮popsearch組件的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)vue搜索高亮popsearch 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
element ui loading加載開啟與關(guān)閉方式
這篇文章主要介紹了element ui loading加載開啟與關(guān)閉方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
使用Vue與WebSocket創(chuàng)建實(shí)時通知系統(tǒng)
在現(xiàn)代應(yīng)用開發(fā)中,實(shí)時性已成為用戶體驗(yàn)的一個重要組成部分,ue 作為一款流行的前端框架,配合 WebSocket,可以輕松構(gòu)建實(shí)時通知系統(tǒng),在本文中,我們將通過一個簡單的示例,使用 Vue 3 的 Composition API(setup 語法糖)來創(chuàng)建一個實(shí)時通知系統(tǒng)2024-11-11
Vue中響應(yīng)式系統(tǒng)實(shí)現(xiàn)原理圖文講解
Vue的響應(yīng)式實(shí)現(xiàn)是借助Object.defineProperty通過重寫getter和setter方法來進(jìn)行的數(shù)據(jù)劫持,Vue3通過Proxy代理攔截對象中任意屬性的變化,通過Reflect反射對源對象的屬性進(jìn)行操作,然后再在get里收集依賴在set里派發(fā)更新2023-03-03
詳解基于 Nuxt 的 Vue.js 服務(wù)端渲染實(shí)踐
這篇文章主要介紹了詳解基于 Nuxt 的 Vue.js 服務(wù)端渲染實(shí)踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10

