【发布时间】:2021-11-30 08:48:32
【问题描述】:
我在 Vue 中制作了一个带有搜索/过滤系统的简单选择组件。根据用户输入,我将展示一些比利时城市建议。
工作示例:https://codesandbox.io/s/wandering-lake-lecok?file=/src/components/Select.vue(Codesandbox 中有时会出现错误消息。刷新浏览器中的构建,它应该可以工作)
我想让用户体验更进一步,并用粗体和下划线显示用户输入的匹配部分。因此我有一个有效的makeBold 函数。通过将建议字符串分成多个部分,我可以添加粗体和下划线标记并返回建议。
computed: {
results() {
return this.options.filter((option) =>
option.display_name
.replaceAll("-'", "")
.toLowerCase()
.includes(this.searchInput.replaceAll("-'", "").toLowerCase())
);
},
},
methods: {
makeBold(str, query) {
const n = str.toUpperCase();
const q = query.toUpperCase();
const x = n.indexOf(q);
if (!q || x === -1) {
return str;
}
const l = q.length;
return (
str.substr(0, x) + "<b><u>" + str.substr(x, l) + "</u></b>" + str.substr(x + l)
);
},
}
一个问题,比利时的许多城市都使用破折号和/或撇号。在建议功能中,我删除了这些字符,因此用户无需键入它们。但在 makeBold 函数中,我想让这些字符加粗并加下划线。
例如:
当输入是“sint j”、“sintj”或“Sint-j”时,我希望建议看起来像“Sint-Jans-Molenbeek”和“Sint- J在't Goor'
有人可以告诉我如何实现这一目标吗?
【问题讨论】:
标签: javascript vue.js drop-down-menu