纯JS搜索页面内容-我的扩展版本
2020-12-13 03:07
标签:style blog class code java c 我扩展了什么? 1.不区分大小写,且替换后保留原大小写内容. 2.自动滚动到所属位置. 时间比较赶 也比较粗糙. 原作 张鑫旭 ------- 纯JS搜索页面内容-我的扩展版本,搜素材,soscw.com 纯JS搜索页面内容-我的扩展版本 标签:style blog class code java c 原文地址:http://www.cnblogs.com/crabzzz/p/3724032.html
$.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 = /[^]+|]*)>/g;
var
a = v_html.match(tags), test = 0;
$.each(a,
function
(i, c) {
if
(!//.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, "").replace(/#♂spend#/g, "");
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);
}
});
};