国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

大段文本的多個(gè)關(guān)鍵字高亮

fevin / 1169人閱讀

摘要:前幾天看到有人提在網(wǎng)頁中實(shí)時(shí)高亮關(guān)鍵字,大約萬多個(gè)字中高亮個(gè)關(guān)鍵字,用戶可以隨時(shí)修改并及時(shí)高亮,也就是時(shí)做高亮,說用正則在下效率不理想想了下自已給了一個(gè)實(shí)現(xiàn)方案比如這段文本是這是一大段文本,一大段文本哦關(guān)鍵字是這是大段文本哦首先找出最長的關(guān)

前幾天看到有人提在網(wǎng)頁中實(shí)時(shí)高亮關(guān)鍵字,大約6萬多個(gè)字中高亮600個(gè)關(guān)鍵字,用戶可以隨時(shí)修改并及時(shí)高亮,也就是onkeyup時(shí)做高亮,說用正則在IE下效率不理想

想了下自已給了一個(gè)實(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)鍵字,則從后面截掉一個(gè)字,并把這個(gè)字追加到剩余的字符串開始位置

則"這是一大"變成"這是一" 剩余字符串為:"大段文本,一大段文本哦"

然后再比較"這是一"是否為關(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/90909.html

相關(guān)文章

  • 大段文本多個(gè)關(guān)鍵字高亮

    摘要:前幾天看到有人提在網(wǎng)頁中實(shí)時(shí)高亮關(guān)鍵字,大約萬多個(gè)字中高亮個(gè)關(guān)鍵字,用戶可以隨時(shí)修改并及時(shí)高亮,也就是時(shí)做高亮,說用正則在下效率不理想想了下自已給了一個(gè)實(shí)現(xiàn)方案比如這段文本是這是一大段文本,一大段文本哦關(guān)鍵字是這是大段文本哦首先找出最長的關(guān) 前幾天看到有人提在網(wǎng)頁中實(shí)時(shí)高亮關(guān)鍵字,大約6萬多個(gè)字中高亮600個(gè)關(guān)鍵字,用戶可以隨時(shí)修改并及時(shí)高亮,也就是onkeyup時(shí)做高亮,說用正則在I...

    Little_XM 評(píng)論0 收藏0
  • MacVIM

    摘要:當(dāng)光標(biāo)從一點(diǎn)移動(dòng)到另外一點(diǎn),在這兩點(diǎn)之間的文本包括這兩個(gè)點(diǎn)稱作被跨過,這里的命令也被稱作是。移動(dòng)光標(biāo)到當(dāng)前行的第一個(gè)字母位置。剪貼板在里面被稱為寄存器。將會(huì)拷貝從當(dāng)前光標(biāo)到第三個(gè)出現(xiàn)的引號(hào)之間的內(nèi)容到剪貼板。 https://github.com/b4winckler/macvim/releases Type :h macvim For usage instructions, Typ...

    13651657101 評(píng)論0 收藏0
  • 網(wǎng)頁中文本朗讀功能開發(fā)實(shí)現(xiàn)分享

    摘要:網(wǎng)頁中文本朗讀功能開發(fā)實(shí)現(xiàn)分享文本首發(fā)我的博客前幾天完成了一個(gè)需求,在網(wǎng)頁中完成鼠標(biāo)指向哪里,就用語音讀出所指的文本。獲取完整朗讀文本要處理的朗讀文本這樣就可以獲取到一個(gè)標(biāo)簽的功能提醒和內(nèi)容的全部帶朗讀文本了。 網(wǎng)頁中文本朗讀功能開發(fā)實(shí)現(xiàn)分享 文本首發(fā)我的博客 - https://blog.cdswyda.com/post/2017120914 前幾天完成了一個(gè)需求,在網(wǎng)頁中完成鼠標(biāo)指...

    tianyu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<