chenzhiyong12
快进小树林
采纳率60%
2018-05-26 08:59 阅读 4.0k

有没有能检索网页关键字的js插件?能做到像浏览器ctrl+F搜索那种功能

5

最近在开发这样一个需求:

用户用百度的ueditor编辑正文,然后在手机上需要做一个检索正文关键字的功能

但是遇到了如下问题:

比如用户检索的关键字是“刑法第56条”,正文上确实有该关键字,但实际上该文本经过ueditor的处理后变成了“刑法第56条”,如此,导致检索不出这个关键字

请问有没有什么好方法或插件能解决这样的问题?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • chenzhiyong12 快进小树林 2018-05-26 09:51

    经过ueditor的处理后变成了“刑法span第56条/span”

    点赞 1 评论 复制链接分享
  • chenzhiyong12 快进小树林 2018-05-26 10:09

    网上找到一段代码能实现无html标签的查找,能否改造成如上的需求?
    function encode(s){
    var str = s.replace(/&/g,"&").replace(//g,">").replace(/([\.*[]()\$^])/g,"\$1");
    console.log('encode:'+str);
    return str;
    }
    function decode(s){
    var str = s.replace(/\([\.*[]()\$^])/g,"$1").replace(/>/g,">").replace(/ console.log('decode:'+str);
    return str;
    }
    function highlight(s){
    if (s.length==0){
    return false;
    }
    s=encode(s);
    var obj=document.getElementsByTagName("body")[0];
    var t=obj.innerHTML.replace(/([^<>]*)<\/span>/gi,"$1");
    obj.innerHTML=t;
    var cnt=loopSearch(s,obj);
    t=obj.innerHTML
    var r=/{searchHL}(({(?!\/searchHL})|[^{])*){\/searchHL}/g
    t=t.replace(r,"$1");
    obj.innerHTML=t;
    // alert("搜索到关键词"+cnt+"处")
    }
    function loopSearch(s,obj){
    var cnt=0;
    if (obj.nodeType==3){
    cnt=replace(s,obj);
    return cnt;
    }
    for (var i=0,c;c=obj.childNodes[i];i++){
    if (!c.className||c.className!="highlight")
    cnt+=loopSearch(s,c);
    }
    return cnt;
    }
    function replace(s,dest){
    var r=new RegExp(s,"g");
    var tm=null;
    var t=dest.nodeValue;
    var cnt=0;
    if (tm=t.match(r)){
    cnt=tm.length;
    t=t.replace(r,"{searchHL}"+decode(s)+"{/searchHL}")
    dest.nodeValue=t;
    }
    return cnt;
    }

    点赞 1 评论 复制链接分享

相关推荐