博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索...
阅读量:4914 次
发布时间:2019-06-11

本文共 2111 字,大约阅读时间需要 7 分钟。

1.汉字: 直接添加对应的 
filterable
 
 
2.拼音: 穿梭框和选择器的实现方式有所不同
 
选择器:
 
<1>下载pinyin-match:   npm i --save pinyin-match
 
<2>在main.js引入并注册为全局属性
 
       import PinyinMatch from 'pinyin-match';
      Vue.prototype.$pinyinmatch = PinyinMatch;
 
<3>为需要的选择器添加自定义过滤方法
 
   :filter-method="PinyinMatchsq"
 
实现方法:
 
PinyinMatchsq(val) {
let PinyinMatch = this.$pinyinmatch;
if (val) {
let result = [];
this.salepreInfo.forEach(i => {
let m = PinyinMatch.match(i.username, val);
if (m) {
result.push(i);
}
});
this.salepreInfo = result;
} else {
this.salepreInfo = this.copysalepreInfo;
}
}
 
 
穿梭框:
 
因为穿梭框的匹配机制和选择器有所不同,因此采用其他方案解决。
<1>自己定义一个拼音库的js文件 pinyin.js:
 
链接:  https://www.cnblogs.com/lzcblog/p/10642364.html  
 
<2>实现将汉字转化为拼音以及拼音首字母组合的方法并放到一个js文件中 vue-py.js。
 
 
import pinyin from "./pinyin.js";
export default {
//转化为全拼音
chineseToPinYin: function(l1) {
var l2 = l1.length;
var I1 = "";
var reg = new RegExp("[a-zA-Z0-9]");
for (var i = 0; i < l2; i++) {
var val = l1.substr(i, 1);
var name = this.arraySearch(val, pinyin);
if (reg.test(val)) {
I1 += val;
} else if (name !== false) {
I1 += name;
}
}
I1 = I1.replace(/ /g, "-");
while (I1.indexOf("--") > 0) {
I1 = I1.replace("--", "-");
}
return I1;
},
//转化为首字母组合
CC2PYF: function(l1) {
var l2 = l1.length;
var I1 = "";
var reg = new RegExp("[a-zA-Z0-9- ]");
for (var i = 0; i < l2; i++) {
var val = l1.substr(i, 1);
var name = this.arraySearch(val, pinyin);
if (reg.test(val)) {
I1 += val;
} else if (name !== false) {
I1 += name.substring(0, 1);
}
}
I1 = I1.replace(/ /g, "-");
while (I1.indexOf("--") > 0) {
I1 = I1.replace("--", "-");
}
return I1;
},
arraySearch: function(l1, l2) {
for (var name in pinyin) {
if (pinyin[name].indexOf(l1) !== -1) {
return this.ucfirst(name);
}
}
return false;
},
ucfirst: function(l1) {
if (l1.length > 0) {
var first = l1.substr(0, 1).toUpperCase();
var spare = l1.substr(1, l1.length);
return first + spare;
}
}
};
 
 
<3>在穿梭框中绑定自定义的过滤方法
 
 
:filter-method="PinyinMatch"
 
 
在data中实现过滤方法
 
PinyinMatch(query, val) {
let result =
val.pinyin.indexOf(query) > -1 ||
val.deptUserName.indexOf(query) > -1 ||
val.jx.indexOf(query) > -1;
return result;
}

转载于:https://www.cnblogs.com/lzcblog/p/10579899.html

你可能感兴趣的文章
循环单链表实现
查看>>
Android设计模式实战---责任链模式
查看>>
剑指Offer_31_整数中1出现的次数(从1到n整数中1出现的次数)
查看>>
10月29日 迅雷会员vip账号分享 91freevip 晚间21:00更新
查看>>
【一题多解】Python 字符串逆序
查看>>
open ball、closed ball 与 open set、closed set(interior point,limit point)、dense set
查看>>
字典(dictionary)与映射(map)
查看>>
Python 编程规范 —— TODO 注释(结合 PyCharm)
查看>>
十万个为什么 —— 名词解释(体育)
查看>>
table的设置(w3c)
查看>>
冲刺一
查看>>
【练习】在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b...
查看>>
python解决上楼梯问题
查看>>
变参宏 __VA_ARGS__
查看>>
sql 语句
查看>>
VUE一 基础语法
查看>>
[MySQl]MySQL忘记密码
查看>>
Android的minSdkVersion,targetSdkVersion,maxSdkVersion
查看>>
Xceed WinForm数据表格控件Xceed Grid For .NET控件详细介绍及下载地址
查看>>
ecos启动流程分析
查看>>