vue搜索框实现每个关键字高亮功能
时间: 2023-07-13 08:20:46 浏览: 137
Vue实现搜索结果高亮显示关键字
要实现在 Vue 中的搜索框中输入多个关键字后,将匹配到的每个关键字都高亮显示,可以遵循以下步骤:
1. 在 data 中定义一个变量来保存搜索关键字列表。
2. 在模板中使用 input 元素来渲染搜索框,并为其绑定一个 input 事件来监听输入内容变化。
3. 在模板中渲染需要搜索的内容,并使用 v-html 指令将内容渲染为 HTML。
4. 使用 computed 属性来实现关键字高亮的逻辑。在 computed 中定义一个方法,接收需要搜索的内容和搜索关键字列表,并使用正则表达式将匹配到的关键字用 <span> 标签包裹,从而达到高亮的效果。
以下是一个示例代码:
```
<template>
<div>
<input type="text" v-model="searchText" @input="highlightText" placeholder="请输入搜索关键字">
<div v-html="highlightedContent"></div>
</div>
</template>
<script>
export default {
data() {
return {
searchText: '',
keywords: ['Vue', '高亮'],
content: '这是一段需要搜索的内容,其中包含关键字 Vue 和高亮。'
}
},
computed: {
highlightedContent() {
let result = this.content
this.keywords.forEach(keyword => {
const regex = new RegExp(keyword, 'gi')
result = result.replace(regex, '<span class="highlight">$&</span>')
})
return result
}
},
methods: {
highlightText() {
// 触发 computed 中的方法
}
}
}
</script>
<style>
.highlight {
color: red;
font-weight: bold;
}
</style>
```
在这个示例中,我们在 data 中定义了 searchText、keywords 和 content 三个变量,其中 keywords 是需要搜索的关键字列表。在模板中使用 input 元素来渲染搜索框,并使用 v-model 将输入的内容绑定到 searchText 上,在 input 事件中触发 highlightText 方法。使用 v-html 指令将 computed 中返回的内容渲染为 HTML。在 computed 中定义了一个方法 highlightedContent,使用 forEach 循环遍历关键字列表,使用正则表达式将匹配到的关键字用 span 标签包裹。最后在样式中定义了高亮的样式。
阅读全文