摘要:需求最近在做微信小程序的時候,需要實現在搜索框的輸入內容的時候實現全局匹配實現高亮效果,目前的思路是,遞歸后臺來返回的數據,并將對象的值替換為需要的節點,并且通過來實現,高亮效果。
需求
最近在做微信小程序的時候,需要實現在搜索框的輸入內容的時候實現全局匹配實現高亮效果,目前的思路是,遞歸后臺來返回的數據,并將對象的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 }) } })
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94323.html
摘要:四最后一點點感悟本文總結的比較淺顯很多地方說的也不是太詳細歡迎大家留言一起交流探討堅持學習不斷探索總結路漫漫其修遠兮吾將上下而求索參考資料官方文檔微信小程序官網開發文檔官方開發文檔 一、微信小程序wepy框架簡介: 微信小程序WePY框架是騰訊官方推出來的框架,類似的框架還有美團的mpvue,京東的Taro等; 目前公司開發小程序主要用到的是微信原生方法和官方的wepy框架; wepy...
摘要:微信小程序小米事先聲明,這是一個高仿小米的微信小程序。寫完之后查文檔才發現,微信小程序官方提供了自定義組件的方法有需要的可以查看微信小程序文檔寫完這個組件后我總解了一下需要注意的問題選中了的當前頁面,再次點擊因該無效。 微信小程序-小米Lite 事先聲明,這是一個高仿小米Lite的微信小程序。 我呢現在是一個大三快大四的學生,這個小程序花了我很長時間,把能寫的功能基本上都寫了。我秉著分...
摘要:歌曲來源音樂說明目前只有體驗版,如果有興趣的同學可以私聊我,我幫您加入,名額有限。 歌曲來源:QQ音樂 說明 目前只有體驗版,如果有興趣的同學可以私聊我,我幫您加入,名額有限。 因為個人開發者無法發布在線音樂播放小程序,所以開發該小程序目的只為學習小程序開發; 小程序涉及到到所有歌曲資源都來源于QQ音樂,部分API由本人對QQ音樂接口進行了二次封裝(我會另外再寫一篇文章專門用來分享...
摘要:可以實現在小程序下渲染內容,支持圖片表格在內的大部分特性。運行效果其他項目地址小程序推薦百科知識詞典 wemark可以實現在小程序下渲染Markdown內容,支持圖片、表格在內的大部分Markdown特性。 特性 以小程序自定義組件形式提供,可直接引入使用 支持大部分markdown標記的解析、渲染 支持代碼表格、代碼高亮、HTML視頻等特性 支持使用原生rich-text進行渲染 ...
閱讀 3569·2021-11-18 13:20
閱讀 2727·2021-10-15 09:40
閱讀 1740·2021-10-11 10:58
閱讀 2107·2021-09-27 13:36
閱讀 2586·2021-09-07 10:06
閱讀 1848·2021-08-11 11:21
閱讀 1425·2019-08-29 17:04
閱讀 2080·2019-08-29 14:06