zoukankan      html  css  js  c++  java
  • 如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索

    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;
    }
  • 相关阅读:
    Super Jumping! Jumping! Jumping!(求最大上升子序列和)
    HZNU1837——一道简单的方程
    C
    B
    A
    bfs-Find a way
    bfs——Red and Black
    dfs——n皇后问题
    dfs——n皇后问题
    python画图中colorbar设置刻度和标签字体大小
  • 原文地址:https://www.cnblogs.com/lzcblog/p/10579899.html
Copyright © 2011-2022 走看看