摘要:前幾天看到有人提在網(wǎng)頁中實(shí)時高亮關(guān)鍵字,大約萬多個字中高亮個關(guān)鍵字,用戶可以隨時修改并及時高亮,也就是時做高亮,說用正則在下效率不理想想了下自已給了一個實(shí)現(xiàn)方案比如這段文本是這是一大段文本,一大段文本哦關(guān)鍵字是這是大段文本哦首先找出最長的關(guān)
前幾天看到有人提在網(wǎng)頁中實(shí)時高亮關(guān)鍵字,大約6萬多個字中高亮600個關(guān)鍵字,用戶可以隨時修改并及時高亮,也就是onkeyup時做高亮,說用正則在IE下效率不理想
想了下自已給了一個實(shí)現(xiàn)方案:
比如這段文本是:"這是一大段文本,一大段文本哦"
關(guān)鍵字是:["這是","大段文本","哦"]
首先找出最長的關(guān)鍵字,并把這些關(guān)鍵字弄成map,如:
var keys = ["這是", "這里是", "文本", "一"]; var prepareKeys = function() { if (!prepareKeys.$map) { var map = {}; var maxLength = 0; for (var i = 0; i < keys.length; i++) { map[keys[i]] = 1; maxLength = Math.max(keys[i].length, maxLength); } prepareKeys.$map = { map: map, cache: {}, length: maxLength } } return prepareKeys.$map; }
接下來在大段文本中,從開始位置截取按最長關(guān)鍵字的長度截取一段
則截取后的字符串是:"這是一大",那么剩下的字符串為: "段文本,一大段文本哦"
接下來比較 "這是一大" 是否為關(guān)鍵字,如果是關(guān)鍵字,則著色并繼續(xù)按上述規(guī)則截取剩余的字符串
如果"這是一大"不是關(guān)鍵字,則從后面截掉一個字,并把這個字追加到剩余的字符串開始位置
則"這是一大"變成"這是一" 剩余字符串為:"大段文本,一大段文本哦"
然后再比較"這是一"是否為關(guān)鍵字,直到為空
然后再從剩余的字符串中按上述規(guī)則繼續(xù)截取
最終代碼如下
var input = "這是一大段文本,這是一大段文本"; var keys = ["這是", "這里是", "文本", "一"]; var prepareKeys = function() { if (!prepareKeys.$map) { var map = {}; var maxLength = 0; for (var i = 0; i < keys.length; i++) { map[keys[i]] = 1; maxLength = Math.max(keys[i].length, maxLength); } prepareKeys.$map = { map: map, cache: {}, length: maxLength } } return prepareKeys.$map; } var colorKeyword = function(str) { var info = prepareKeys(); var output = []; while (str) { var sub = str.substring(0, info.length); var oSub = sub; if (info.cache[sub]) { console.log("cache:", sub); output.push(str.charAt(0)); str = str.substring(1); } else { str = str.substring(info.length); while (!info.map[sub] && sub) { str = sub.charAt(sub.length - 1) + str; sub = sub.slice(0, -1); } if (sub) { output.push("<", sub, ">"); } else { info.cache[oSub] = 1; output.push(str.charAt(0)); str = str.substring(1); } } } return output.join(""); } colorKeyword(input);
宣傳下我的區(qū)塊管理框架Magix:https://github.com/thx/magix
歡迎試用Magix、star與fork
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/49973.html
摘要:前幾天看到有人提在網(wǎng)頁中實(shí)時高亮關(guān)鍵字,大約萬多個字中高亮個關(guān)鍵字,用戶可以隨時修改并及時高亮,也就是時做高亮,說用正則在下效率不理想想了下自已給了一個實(shí)現(xiàn)方案比如這段文本是這是一大段文本,一大段文本哦關(guān)鍵字是這是大段文本哦首先找出最長的關(guān) 前幾天看到有人提在網(wǎng)頁中實(shí)時高亮關(guān)鍵字,大約6萬多個字中高亮600個關(guān)鍵字,用戶可以隨時修改并及時高亮,也就是onkeyup時做高亮,說用正則在I...
摘要:當(dāng)光標(biāo)從一點(diǎn)移動到另外一點(diǎn),在這兩點(diǎn)之間的文本包括這兩個點(diǎn)稱作被跨過,這里的命令也被稱作是。移動光標(biāo)到當(dāng)前行的第一個字母位置。剪貼板在里面被稱為寄存器。將會拷貝從當(dāng)前光標(biāo)到第三個出現(xiàn)的引號之間的內(nèi)容到剪貼板。 https://github.com/b4winckler/macvim/releases Type :h macvim For usage instructions, Typ...
摘要:網(wǎng)頁中文本朗讀功能開發(fā)實(shí)現(xiàn)分享文本首發(fā)我的博客前幾天完成了一個需求,在網(wǎng)頁中完成鼠標(biāo)指向哪里,就用語音讀出所指的文本。獲取完整朗讀文本要處理的朗讀文本這樣就可以獲取到一個標(biāo)簽的功能提醒和內(nèi)容的全部帶朗讀文本了。 網(wǎng)頁中文本朗讀功能開發(fā)實(shí)現(xiàn)分享 文本首發(fā)我的博客 - https://blog.cdswyda.com/post/2017120914 前幾天完成了一個需求,在網(wǎng)頁中完成鼠標(biāo)指...
閱讀 1648·2021-10-12 10:11
閱讀 3764·2021-09-03 10:35
閱讀 1446·2019-08-30 15:55
閱讀 2137·2019-08-30 15:54
閱讀 1004·2019-08-30 13:07
閱讀 1018·2019-08-30 11:09
閱讀 584·2019-08-29 13:21
閱讀 2655·2019-08-29 11:32