如果不使用highlighttextarea插件在数组中突出显示textarea中的Text

时间:2015-08-25 11:41:36

标签: javascript jquery html textarea highlight

我正在使用jQuery highlightTextarea插件来突出显示html textarea中的单词。

jQuery highlightTextarea

它目前突出显示数组中的单词

var words = ['google', 'facebook', 'github', 'microsoft', 'yahoo', 'stackoverflow'];

但我要做的是突出显示不在数组中的所有单词。我有什么方法可以做到这一点吗?

我的jsfiddle:http://jsfiddle.net/fr7wb2b4/11/

2 个答案:

答案 0 :(得分:1)

愚蠢我没有考虑过,这是怎么回事:

$(document).ready(function () {
var words = ['google', 'facebook', 'github', 'microsoft', 'yahoo', 'stackoverflow'];
    $('#textarea').highlightTextarea({
        words: [
           { color : '#F00', 
              words  : ['(.+)'] 
            },         // Make everything highlighted

            { color : '#FFF',
              words : words 
            }          // Make white what matched
        ]
    });
});

Fiddle with it over here

您还可以使用words : ['(\\w+)']仅突出显示单词

答案 1 :(得分:1)

您可以查看库源代码,高亮代码:https://github.com/mistic100/jquery-highlighttextarea/blob/master/jquery.highlighttextarea.js#L67

执行实际突出显示的代码段是:

$.each(this.settings.words, function(color, words) {
        text = text.replace(
            new RegExp(that.spacer+'('+ words.join('|') +')'+that.spacer, that.regParam),
            '<mark style="background-color:'+ color +';">$1</mark>'
        );
    });

所以你可以用你自己的函数替换highlight函数,并做任何你选择突出显示的逻辑(欢迎开源!)

例如,您可以复制粘贴整个函数,只需用以下内容替换$.each(words...循环:

var replaced = '',
    tokens = text.split(' '); 
$.each(tokens, function(ind, token) {
   if (this.settings.words.indexOf(token) != -1) {
     // this token in the text is part of the 'words' - do not highlight
     replaced += token;
   }
   else {
     // this token isn't part of the words - highlight it
     replaced += '<span style="...">'+token+'</span>';
   }
   replaced += ' ';
}
text = replaced;