text: // by zhangxixnu 2010-06-21  welcome to visit my personal website http://www.zhangxinxu.com/
  // textSearch.js v1.0 文字，关键字的页面纯客户端搜索
  // 2010-06-23 修复多字母检索标签破碎的问题
  // 2010-06-29 修复页面注释显示的问题
  // 2013-05-07 修复继续搜素关键字包含之前搜索关键字没有结果的问题
  // 不论何种情况，务必保留作者署名。 
  //<input type="text" name="text"><a onclick='$("body").textSearch($("input").val());'>搜索</a>
  //onclick='$(".test").textSearch("空姐 凤姐 芙蓉姐",{markColor: "blue"});'
  
  (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(/<!–[\w\W\r\n]*?–>/gmi,"");
              
              //将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), "ig");
                          if(reg.test(c)){
                              //正则替换
                              c = c.replace(reg,"♂"+con+"♀");
                              test = 1;
                          }
                      });
                      c = c.replace(/♂/g,"<span rel='mark' "+clStr+">").replace(/♀/g,"</span>");
                      a[i] = c;
                  }
              });
              //将支离数组重新组成字符串
              var new_html = a.join("");
              
              $(this).html(new_html);
              
              if(test === 0 && sets.nullReport){
                  alert("没有搜索结果");
                  return false;
              }
              
              //执行回调函数
              sets.callback();
          });
      };
  })(jQuery);