资讯专栏INFORMATION COLUMN

微信小程序实现全局搜索高亮

Aklman / 3486人阅读

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

需求

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

思路

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

截图

代码

wxml:


    
    
           
           
        
        
               
        
    

js:

//index.js
//index.js
const app = getApp()

Page({
    data: {
        homeUrl: "../index/index",
        mineUrl: "../mine/mine",
        newFillUrl: "../newFill/newFill",
        historyUrl: "../historyData/historyData",
        json: [{ name: "你是谁", age: "awdqwwk", 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
        })
    }

})

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94323.html

相关文章

  • 信小程序wepy框架学习和使用心得

    摘要:四最后一点点感悟本文总结的比较浅显很多地方说的也不是太详细欢迎大家留言一起交流探讨坚持学习不断探索总结路漫漫其修远兮吾将上下而求索参考资料官方文档微信小程序官网开发文档官方开发文档 一、微信小程序wepy框架简介: 微信小程序WePY框架是腾讯官方推出来的框架,类似的框架还有美团的mpvue,京东的Taro等; 目前公司开发小程序主要用到的是微信原生方法和官方的wepy框架; wepy...

    Baaaan 评论0 收藏0
  • 信小程序-小米Lite

    摘要:微信小程序小米事先声明,这是一个高仿小米的微信小程序。写完之后查文档才发现,微信小程序官方提供了自定义组件的方法有需要的可以查看微信小程序文档写完这个组件后我总解了一下需要注意的问题选中了的当前页面,再次点击因该无效。 微信小程序-小米Lite 事先声明,这是一个高仿小米Lite的微信小程序。 我呢现在是一个大三快大四的学生,这个小程序花了我很长时间,把能写的功能基本上都写了。我秉着分...

    everfly 评论0 收藏0
  • 信小程序-仿QQ音乐

    摘要:歌曲来源音乐说明目前只有体验版,如果有兴趣的同学可以私聊我,我帮您加入,名额有限。 歌曲来源:QQ音乐 说明 目前只有体验版,如果有兴趣的同学可以私聊我,我帮您加入,名额有限。 因为个人开发者无法发布在线音乐播放小程序,所以开发该小程序目的只为学习小程序开发; 小程序涉及到到所有歌曲资源都来源于QQ音乐,部分API由本人对QQ音乐接口进行了二次封装(我会另外再写一篇文章专门用来分享...

    Faremax 评论0 收藏0
  • 信小程序Markdown渲染组件wemark

    摘要:可以实现在小程序下渲染内容,支持图片表格在内的大部分特性。运行效果其他项目地址小程序推荐百科知识词典 wemark可以实现在小程序下渲染Markdown内容,支持图片、表格在内的大部分Markdown特性。 特性 以小程序自定义组件形式提供,可直接引入使用 支持大部分markdown标记的解析、渲染 支持代码表格、代码高亮、HTML视频等特性 支持使用原生rich-text进行渲染 ...

    ctriptech 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<