视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
html页面用js中实现查找功能
2020-11-27 15:27:40 责编:小采
文档
今天先说一个这几天做的功能,就是html页面的查找功能。 这个功能主要是实现在html查找框内输入字符,之后按后面的上一个下一个按钮,会自动把查询区域内的匹配字符用特殊的样式标记,之后可以继续按上一个下一个按钮把按照顺序浏览匹配字符,并把当前匹配的字符用另一种样式与其他匹配字符加以区别。付有html代码哦!

样式演示:

代码演示:

html

<div class="container" style="z-index: 999" id="searchDiv">
<div class="keyword-search">
查找:
<input id="key" type="text" style="width: 200px;" placeholder="关键词" />
<a href="javascript:void(0);" class="prev" onclick='wordSearch(1)'><i class="c-icon"></i></a>
<a href="javascript:void(0);" class="next" onclick='wordSearch()'><i class="c-icon"></i></a>
</div>
</div>

script

 <script>//搜索功能
 var oldKey0 = "";
 var index0 = -1;var oldCount0 = 0;
 var newflag = 0;
 var currentLength = 0;

 function wordSearch(flg) {
 var key = $("#key").val(); //取key值
 if (!key) {
 return; //key为空则退出
 }
 getArray();
 focusNext(flg);

 }

 function focusNext(flg) {
 if (newflag == 0) {//如果新搜索,index清零
 index0 = 0;
 }
 if (!flg) {
 if (oldCount0 != 0) {//如果还有搜索
 if (index0 < oldCount0) {//左边如果没走完,走左边
 focusMove(index0);
 index0++;
 } else if (index0 == oldCount0) {//都走完了
 index0 = 0;
 focusMove(index0);
 index0++;
 }
 else {
 index0 = 0;//没确定
 focusMove(index0);
 index0++;
 }
 }

 } else {
 if (oldCount0 != 0) {//如果还有搜索
 if (index0 <= oldCount0 && index0 > 0) {//左边如果没走完,走左边
 index0--;
 focusMove(index0);
 } else if (index0 == 0) {//都走完了
 index0 = oldCount0;
 index0--
 focusMove(index0);
 }
 }
 }
 }
 function getArray() {
 newflag = 1;
 $(".contrast .result").removeClass("res");
 var key = $("#key").val(); //取key值
 if (!key) {
 oldKey0 = "";
 return; //key为空则退出
 }
 if (oldKey0 != key || $(".current").length != currentLength) {
 //重置
 index0 = 0;
 var index = 0;
 $(".contrast .result").each(function () {
 $(this).replaceWith($(this).html());
 });
 pos0 = new Array();
 if ($(".contrast-wrap").hasClass("current")) {
 currentLength = $(".current").length;
 $(".current .contrast").each(function () {
 $(this).html($(this).html().replace(new RegExp(key, "gm"), "<span id='result" + (index++) + "' class='result'>" + key + "</span>")); // 替换
 });
 } else {
 $(".contrast-wrap").addClass('current');
 currentLength = $(".current").length;
 $(".contrast").each(function () {
 $(this).html($(this).html().replace(new RegExp(key, "gm"), "<span id='result" + (index++) + "' class='result'>" + key + "</span>")); // 替换
 });
 }
 //$("#key").val(key);
 oldKey0 = key;

 //$(".contrast .result").each(function () {
 // $(this).parents('.contrast-wrap').addClass('current');
 // pos0.push($(this).offset().top);
 //});
 // pos0.push($(".contrast .result:eq(2)").offset().top - $(".contrast .result:eq(2)").parents(".contrast").offset().top);
 oldCount0 = $(".contrast .result").length;
 newflag = 0;
 }
 }
 function focusMove(index0) {
 $(".contrast .result:eq(" + index0 + ")").parents('.contrast-wrap').addClass('current');
 $(".contrast .result:eq(" + index0 + ")").addClass("res");
 var top = $(".contrast .result:eq(" + index0 + ")").offset().top + $(".contrast .result:eq(" + index0 + ")").parents(".contrast").scrollTop();
 var intop = top - $(".contrast .result:eq(" + index0 + ")").parents(".contrast").offset().top;
 $(".contrast .result:eq(" + index0 + ")").parents(".contrast").animate({ scrollTop: intop }, 200);
 if ($(".contrast .result:eq(" + index0 + ")").parents(".contrast").scrollTop() == 0) {
 $("html, body").animate({ scrollTop: top - 200 }, 200);
 } else {
 $("html, body").animate({ scrollTop: $(".contrast .result:eq(" + index0 + ")").parents(".contrast").offset().top - 200 }, 200);
 }

 }


 $('#key').change(function () {
 if ($('#key').val() == "") {
 index0 = 0;
 $(".contrast .result").each(function () {
 $(this).replaceWith($(this).html());
 });
 oldKey0 = "";
 }
 });
 </script>

接下来记一下实现原理:

首先先把上一次的查询结果清除掉,然后根据key的值,用正则表达式把区域内所有匹配的字符全都加上特殊的样式,比如方法中就全部加了一个类名为result的span标签,用odKey0变量记录key的值(下次再进入先比较如果一样的话说明是要看下一个或者上一个的内容,就不用在进入用正则表达式匹配了),oldCount0记录总共查询出来的个数,newflag置0(如果不是初次查询newflag为1)。

接着进入getNext方法,flg表示用户按下的是上一个还是下一个按钮,用index0记录当前查看的是哪一个匹配字符,与oldCount0比较,确定是递增或递减还是置0(如果大于oldCount0或者小于0,就要重新开始)。

focusMove方法就是使页面定位到当前元素的操作。

相关推荐:

HTML怎么实现数字焦点图轮播代码

html里怎么插入图片

HTML里DIV相互重叠怎么办

HTML里怎么使用margin 0 auto

下载本文
显示全文
专题