// textSearch.js v1.0 文字,关键字的页面纯客户端搜索
// 2010-06-23 修复多字母检索标签破碎的问题
// 2010-06-29 修复页面注释显示的问题
// 2013-05-07 修复继续搜素关键字包含之前搜索关键字没有结果的问题
// 不论何种情况,务必保留作者署名。

(function($){
$.fn.textSearch = function(str,options){
var defaults = {
divFlag: true,
divStr: " ",
markClass: "",
markColor: "red",
nullReport: true,
callback: function(){
return false;
}
};
var sets = $.extend({}, defaults, options || {}), clStr;
if(sets.markClass){
clStr = "class='"+sets.markClass+"'";
}else{
clStr = "style='color:"+sets.markColor+";'";
}

//对前一次高亮处理的文字还原
$("span[rel='mark']").each(function() {
var text = document.createTextNode($(this).text());
$(this).replaceWith($(text));
});

//字符串正则表达式关键字转化
$.regTrim = function(s){
var imp = /[\^\.\\\|\(\)\*\+\-\$\[\]\?]/g;
var imp_c = {};
imp_c["^"] = "\\^";
imp_c["."] = "\\.";
imp_c["\\"] = "\\\\";
imp_c["|"] = "\\|";
imp_c["("] = "\\(";
imp_c[")"] = "\\)";
imp_c["*"] = "\\*";
imp_c["+"] = "\\+";
imp_c["-"] = "\\-";
imp_c["$"] = "\$";
imp_c["["] = "\\[";
imp_c["]"] = "\\]";
imp_c["?"] = "\\?";
s = s.replace(imp,function(o){
return imp_c[o];
});
return s;
};
$(this).each(function(){
var t = $(this);
str = $.trim(str);
if(str === ""){
alert("关键字为空");
return false;
}else{
//将关键字push到数组之中
var arr = [];
if(sets.divFlag){
arr = str.split(sets.divStr);
}else{
arr.push(str);
}
}
var v_html = t.html();
//删除注释
v_html = v_html.replace(/<!--(?:.*)\-->/g,"");

//将HTML代码支离为HTML片段和文字片段,其中文字片段用于正则替换处理,而HTML片段置之不理
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a = v_html.match(tags), test = 0;
$.each(a, function(i, c){
if(!/<(?:.|\s)*?>/.test(c)){//非标签
//开始执行替换
$.each(arr,function(index, con){
if(con === ""){return;}
var reg = new RegExp($.regTrim(con), "g");
if(reg.test(c)){
//正则替换
c = c.replace(reg,"♂"+con+"♀");
test = 1;
}
});
c = c.replace(/♂/g,"<mark "+clStr+">").replace(/♀/g,"</mark>");
a[i] = c;
}
});
//将支离数组重新组成字符串
var new_html = a.join("");

$(this).html(new_html);

if(test === 0 && sets.nullReport){
alert("没有搜索结果");
return false;
}

//执行回调函数
sets.callback();
});
};
})(jQuery);

//实例

/**

$("#searchTextTest") 为整个div区域

**/

<script>
  $("form").submit(function(){
  var v = $("#txtSearchKeyword").val();
  $("#searchTextTest").textSearch(v);
  return false;
  });
  </script>

最新文章

  1. [CentOS] 解决 crontab 无法读取环境变量的问题
  2. 【原创】GC/垃圾回收简介
  3. 基于OpenCv的人脸检测、识别系统学习制作笔记之二
  4. 项目解析- JspLibrary - part1
  5. Python 资源
  6. Raspberry Pi + 3个USB摄像头 + Motion(简易监控设备配置记录1——介绍以及安装) 分类: Raspberry Pi 服务器搭建 2015-04-12 19:21 226人阅读 评论(0) 收藏
  7. jqGrid添加详细按钮,单击弹出窗体
  8. [Swust OJ 404]--最小代价树(动态规划)
  9. hdu 4736 This Is The Job The Bear Finds(2013年成都ACM网络赛)
  10. Laravel 5.2 教程 - 队列
  11. Android View绘制和显示原理简介
  12. SIMATIC_STEP_V5.6使用报错
  13. HBase数据库配置中各配置项的释义及默认值
  14. JS XMLHttpRequesst对象 http post的五种请求状态
  15. 那些令人迷惑的名词:切图/H5/XML/REST
  16. Apache Flume 学习笔记
  17. SQL表分区之二
  18. MySQL5.6数据库8小时内无请求自动断开连接
  19. LeetCode OJ 22. Generate Parentheses
  20. 关于switch语句中使用String类型的实现原理

热门文章

  1. .NETFramework-Drawing:Font
  2. MD5 密码加密算法 系统等待
  3. Metasloit渗透测试魔鬼训练营
  4. PCB Web版SI9000阻抗计算器
  5. bzoj 1787: [Ahoi2008]Meet 紧急集合【树链剖分lca】
  6. bzoj 1922: [Sdoi2010]大陆争霸【dijskstra】
  7. hdu 5201 The Monkey King【容斥原理+组合数学】
  8. 使用jquery进行跨域操作
  9. django 第一个项目测试
  10. 状压DP+记忆化搜索 UVA 1252 Twenty Questions