推荐一款AI网站 AI写作与AI绘画智能创作平台 - 海鲸AI | 智能AI助手,可以免费领取
GPT3.5无限卡速速领取
在Vue中实现搜索列表关键词高亮的功能,你可以创建一个自定义指令或者使用计算属性结合v-html指令。这里提供一个使用计算属性的简单示例:
首先,你需要一个列表(数组)和一个搜索关键词(字符串)作为数据:
<template>
<div id="app">
<input type="text" v-model="searchKeyword" placeholder="Search..." />
<ul>
<li v-for="item in highlightedList" v-html="item"></li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
searchKeyword: '',
list: [
'Apple',
'Banana',
'Cherry',
'Date',
'Elderberry',
'Fig',
'Grape',
// ... 更多水果
],
};
},
computed: {
highlightedList() {
if (!this.searchKeyword.trim()) {
return this.list;
}
const regex = new RegExp(`(${this.escapeRegExp(this.searchKeyword)})`, 'gi');
return this.list.map(item => {
return item.replace(regex, '<span class="highlight">$1</span>');
});
},
},
methods: {
escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
},
},
};
</script>
<style>
.highlight {
background-color: yellow;
}
</style>
在这个示例中,我们做了以下几步:
-
创建了一个
input元素,使用v-model绑定到searchKeyword数据属性上,这样用户输入的搜索关键词就会同步到这个属性。 -
使用
v-for指令遍历highlightedList计算属性生成列表项。 -
highlightedList计算属性会检查searchKeyword是否有值,如果没有,就返回原始列表。如果有值,它会创建一个正则表达式来匹配关键词,并用<span>标签包裹匹配到的关键词以实现高亮效果。 -
escapeRegExp方法用于转义用户输入的任何可能会影响正则表达式的特殊字符。 -
v-html指令用于将计算属性中返回的带有HTML标签的字符串渲染到页面上。 -
.highlight类定义了高亮样式,这里简单地将背景设置为黄色。
注意:使用v-html可能会导致跨站脚本(XSS)攻击,因为它可以渲染HTML。在这个例子中,因为我们只是替换了由用户输入的纯文本关键词,所以是安全的。但是如果你的数据来源不可靠,你应该使用其他方法来避免XSS攻击。