• 纯JS搜索页面内容-我的扩展版本


    我扩展了什么?

    1.不区分大小写,且替换后保留原大小写内容.

    2.自动滚动到所属位置.

    时间比较赶 也比较粗糙.

    原作 张鑫旭

    -------

    $.tmp_textSearch_str = "";
    $.fn.textSearch = function(str, options) { //纯JS字符串搜索
        var defaults = {
            divFlag: true,
            divStr: " ",
            markClass: "",
            markColor: "red",
            nullReport: true,
            scroll: 1,
            callback: function() {
                return false;
            }
        };
        var sets = $.extend({}, defaults, options || {}), clStr;
        if (sets.markClass) {
            clStr = "class='" + sets.markClass + "'";
        } else {
            clStr = "style='color:" + sets.markColor + ";'";
        }
    
        //对前一次高亮处理的文字还原		
        $("span[data-keyrole='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("Keyword is empty.");
                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片段
            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, "#♂spstart# $1 #♂spend#");
                            test = 1;
                        }
                    });
                    c = c.replace(/#♂spstart#/g, "<span data-keyrole='mark' " + clStr + ">").replace(/#♂spend#/g, "</span>");
                    a[i] = c;
                }
            });
            //将支离数组重新组成字符串
            var new_html = a.join("");
            $(this).html(new_html);
    
            if (test === 0 && sets.nullReport) {
                alert("No result found in this page.");
                return false;
            }
            sets.callback();
            if (sets.scroll) {
                //自动滚动
                $.tmp_textSearch_str = $.tmp_textSearch_str || str;
                if ($.tmp_textSearch_str == str) {
                    $.tmp_textSearch_scollCount = $.tmp_textSearch_scollCount === undefined ? 0 : ($.tmp_textSearch_scollCount + 1);
                } else {
                    $.tmp_textSearch_str = str;
                    $.tmp_textSearch_scollCount = 0;
                }
                var span = $("span[data-keyrole='mark']")[$.tmp_textSearch_scollCount];
                if (!span) {
                    $.tmp_textSearch_scollCount = 0;
                    span = $("span[data-keyrole='mark']")[0];
                }
                var toTop = $(span).offset().top - 10;
                $('html,body').animate({scrollTop: toTop}, window.navigator.appName == 'Opera' ? 0 : 100);
            }
    
        });
    };
    

      

  • 相关阅读:
    设置android:supportsRtl=&quot;true&quot;无效问题
    使用 Docker/LXC 迅速启动一个桌面系统
    快速部署Python应用:Nginx+uWSGI配置详解
    链表源代码(C语言实现)
    delete
    Linux与Unix shell编程指南(完整高清版).pdf
    数据挖掘python,java
    shops
    如何用Excel打开CSV文件
    svn迁移到git
  • 原文地址:https://www.cnblogs.com/crabzzz/p/3724032.html
Copyright © 2020-2023  润新知