element-plus 使用 autocomplete组件实现输入建议项按照0-9A-Za-z的排序规则进行排序
时间: 2023-08-04 18:03:56 浏览: 150
要使用 element-plus 的 autocomplete 组件实现输入建议项按照 0-9A-Za-z 的排序规则进行排序,你可以在 `:filter-method` 属性中设置一个自定义的过滤函数,在这个函数中对搜索结果进行排序。
假设你的搜索结果是一个数组,每个元素都包含一个 `value` 字段用于显示在建议项中。
那么你可以在 `:filter-method` 中设置一个函数,该函数接收两个参数,`query` 表示用户输入的关键字,`item` 表示搜索结果数组中的一个元素。在函数中,你可以先将 `query` 和 `item.value` 转换为小写,然后比较它们的首字母。
如果 `query` 的首字母在 `0-9A-Za-z` 中,那么你可以使用 `indexOf` 函数获取它在 `0-9A-Za-z` 中的位置,然后用这个位置来比较搜索结果的首字母在 `0-9A-Za-z` 中的位置。如果两个位置不同,就按照位置升序排序。如果两个位置相同,就按照字符串自身的比较规则进行比较。
如果 `query` 的首字母不在 `0-9A-Za-z` 中,那么你可以将搜索结果的首字母也转换为小写,然后按照字符串自身的比较规则进行比较。
下面是一个示例代码:
```html
<template>
<el-autocomplete v-model="value" :fetch-suggestions="querySearchAsync" :filter-method="filterResults"></el-autocomplete>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
value: '',
suggestions: []
};
},
methods: {
querySearchAsync(queryString, cb) {
axios.get('/api/search', {
params: { q: queryString }
}).then(response => {
const results = response.data;
this.suggestions = results;
cb(this.suggestions);
}).catch(error => {
console.error(error);
});
},
filterResults(query, item) {
const qLower = query.toLowerCase();
const itemLower = item.value.toLowerCase();
const qIndex = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.indexOf(qLower.charAt(0));
const itemIndex = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.indexOf(itemLower.charAt(0));
if (qIndex >= 0 && itemIndex >= 0) {
if (qIndex !== itemIndex) {
return qIndex - itemIndex;
} else {
return itemLower.localeCompare(qLower);
}
} else {
return itemLower.localeCompare(qLower);
}
}
}
};
</script>
```
在这个示例中,我们将 `filterResults` 方法设置为 `:filter-method` 属性,该方法接收 `query` 和 `item` 两个参数,分别表示用户输入的关键字和搜索结果数组中的一个元素。在方法中,我们使用 `toLowerCase` 方法将 `query` 和 `item.value` 转换为小写,然后比较它们的首字母在 `0-9A-Za-z` 中的位置。如果位置不同,就按照位置升序排序。如果位置相同,就按照字符串自身的比较规则进行比较。如果 `query` 的首字母不在 `0-9A-Za-z` 中,就将搜索结果的首字母也转换为小写,然后按照字符串自身的比较规则进行比较。
阅读全文