博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序实现全局搜索高亮
阅读量:5826 次
发布时间:2019-06-18

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

需求

最近在做微信小程序的时候,需要实现在搜索框的输入内容的时候实现全局匹配实现高亮效果,目前的思路是,递归后台来返回的数据,并将对象的value值替换为需要的dom节点,并且通过rich-text来实现,高亮效果。

思路

在实现的过程中主要考虑,不同类型的数据结构,过滤掉特殊符号,url这些基本需求;同时在实现的过程中每次都要去处理最原始的数据,这就需要考虑到对象的深拷贝问题,目前所采用的方法是通过JSON.parse(JSON.stringify(str))来处理,因为在这个全局搜索的项目中不太会用到函数这些对象。最后通过replace方法来处理这些目标字符串。

截图

代码

wxml:

js:

//index.js//index.jsconst app = getApp()Page({    data: {        homeUrl: '../index/index',        mineUrl: '../mine/mine',        newFillUrl: '../newFill/newFill',        historyUrl: '../historyData/historyData',        json: [{ name: '你是谁', age: 'awdqww\\k', address: 'auemnkjkifwh{\\efwfheffoewjowef', aihao: ['sdsd', 'sdfsd', 'sdsf'] }, { name: '98797', age: '6544656', address: 'https://www.baidu.com/' }],        newJson: '',        tempText: '',        showShadow: false,        chartNumber: 0,        newStr:''    },    /**     * 生命周期函数--监听页面加载     */    onLoad: function (options) {        this.setData({            newJson: this.data.json        })    },    haha: function () {        console.log('haha');        wx.navigateTo({            url: '../mine/mine',        })    },    digui: function (newJson, obj, key) {        var urlReg = new RegExp('(https ?|ftp | file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]')        var that = this;        var reg = that.data.tempText;        if (that.data.tempText == '.' || that.data.tempText == '\\' || that.data.tempText == '\?' || that.data.tempText == '\[' || that.data.tempText == '\]') {            reg = '\\' + that.data.tempText        }        var reg = new RegExp(reg, 'ig');        if (newJson.constructor == Array) {            newJson.forEach(function (item, index) {                if (item.constructor == String && !urlReg.test(item)) {                    obj[key].splice(index, 1, item.replace(reg, function (index) {                        if (that.data.newStr != ''){                            that.setData({                                chartNumber: (that.data.chartNumber + 1)                            })                        }                        return "" + that.data.tempText + ""                    }))                } else {                    that.digui(item, newJson);                }            });        } else if (newJson.constructor == Object) {            var json = {};            for (var key in newJson) {                json[key] = newJson;                that.digui(newJson[key], newJson, key);            }        } else if (newJson.constructor == String && !urlReg.test(newJson)) { // 这里做全局替换            if (key) {                obj[key] = newJson.replace(reg, function () {                    if (that.data.newStr != '') {                        that.setData({                            chartNumber: (that.data.chartNumber + 1)                        })                    }                    return "" + that.data.tempText + ""                })            }        }    },    showBgShadow: function (e) {        this.setData({            showShadow: e.detail.showBgShadow        })    },    bindKeyInput: function (e) {        var regChart = this.data.regChart;        var text = e.detail.value;        var newStr = '';        newStr = text.replace(/[\@\#\$\%\^\&\*\{\}\:\"\L\<\>\?\\\.]/, '')        this.setData({            tempText: newStr,            chartNumber: 0,            newStr: newStr        })        var newJson = JSON.parse(JSON.stringify(this.data.json));        this.digui(newJson);        this.setData({            newJson: newJson        })    }})

转载地址:http://iosdx.baihongyu.com/

你可能感兴趣的文章
802.11 学习笔记
查看>>
Leetcode-Database-176-Second Highest Salary-Easy(转)
查看>>
构建Docker Compose服务堆栈
查看>>
最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
查看>>
Hadoop生态圈-Kafka常用命令总结
查看>>
如何基于Redis Replication设计并实现Redis-replicator?
查看>>
浮点数内存如何存储的
查看>>
贪吃蛇
查看>>
EventSystem
查看>>
用WINSOCK API实现同步非阻塞方式的网络通讯
查看>>
玩一玩博客,嘿嘿
查看>>
P1352 没有上司的舞会
查看>>
ios11文件夹
查看>>
【HLOJ 559】好朋友的题
查看>>
Electric Fence(皮克定理)
查看>>
nvl 在mysql中如何处理
查看>>
MyEclipse 快捷键
查看>>
快速傅里叶变换FFT
查看>>
大数据常用基本算法
查看>>
JavaScript学习笔记(十三)——生成器(generator)
查看>>