需求:模糊查询,并且高亮,希望搜索一句话中任意的词,都可以搜索到,
需求1举例:比如搜索西,搜索到所有带西的句子,
需求2举例: 搜索西大,可以查询到带有西或者大的句子,并且全部高亮。
<template>
<div>
<input v-model="keyword" placeholder="请输入搜索关键字">
<ul>
<li v-for="(item, index) in filteredData" :key="index" v-html="highlight(item.text)"></li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
keyword: '',
data: [
{ text: '西安的城墙很大。' },
{ text: '西安交通大学是一所985高校。' },
{ text: '我喜欢吃西瓜。' },
{ text: '这是一份西式菜谱。' }
]
}
},
computed: {
filteredData() {
const pattern = new RegExp(this.keyword.split(/\s+/).join('.*'), 'gi');
return this.data.filter(item => pattern.test(item.text));
}
},
methods: {
highlight(text) {
const pattern = new RegExp(this.keyword.split(/\s+/).join('|'), 'gi');
return text.replace(pattern, '<span style="color: red">$&</span>');
}
}
}
</script>