用js 如何实现快速过滤关键字(并高亮显示关键字)。。javascript厉害的高手来瞧瞧
比如用户可以输入6万字。。一共有6百个关键字。在用户按下键盘(onkeydown)事件去判断用户有没有输入这些关键字。。只要输入就高亮显示这些关键字。。做到及时高亮关键字...
比如用户可以输入6万字。。一共有6百个关键字。在用户按下键盘(onkeydown)事件去判断用户有没有输入这些关键字。。只要输入就高亮显示这些关键字。。做到及时高亮关键字。。。有没有高效的方法。。
用正则表达式,在IE下还是不理想,超过了一秒
前端开发 展开
用正则表达式,在IE下还是不理想,超过了一秒
前端开发 展开
展开全部
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,
length:maxLength
}
}
return prepareKeys.$map;
}
var colorKeyword=function(str){
var info=prepareKeys();
var output=[];
while(str){
var sub=str.substring(0,info.length);
str=str.substring(info.length);
while(!info.map[sub]&&sub){
str=sub.charAt(sub.length-1)+str;
sub=sub.slice(0,-1);
console.log(sub);
}
console.log('color',sub);
if(sub){
output.push('#',sub,'#');
}else{
output.push(str.charAt(0));
str=str.substring(1);
}
}
return output.join('');
}
colorKeyword(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,
length:maxLength
}
}
return prepareKeys.$map;
}
var colorKeyword=function(str){
var info=prepareKeys();
var output=[];
while(str){
var sub=str.substring(0,info.length);
str=str.substring(info.length);
while(!info.map[sub]&&sub){
str=sub.charAt(sub.length-1)+str;
sub=sub.slice(0,-1);
console.log(sub);
}
console.log('color',sub);
if(sub){
output.push('#',sub,'#');
}else{
output.push(str.charAt(0));
str=str.substring(1);
}
}
return output.join('');
}
colorKeyword(input);
追问
妙啊。。高手
追答
谢谢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询