模拟浏览器搜索框

逻辑及过程(代码只包含第一种)

1.某类标签中文字含有搜索字符串的标签颜色属性更新(是整个字符串变色,不是只匹配的字符串变色—有些情况下加span标签带颜色显不出来)。
2.把搜索到的字符串加span标签变色,如:搜索“城市”,把代码中所有“城市”替换为"城市"。
3.更新过程
a.每次输入框内容变更后开始匹配(可提前记录原先搜索区/搜索标签的颜色属性值为数组,更新时把匹配到字符串的标签设置为特定属性,其余的更新为原始值)
b.记录html初始代码,每次用此代码替换搜索字符串为加span内容

<input type="text" id="search_box" value="" style="position:fixed;top:0;right:0;">
//html代码
<script type="text/javascript" src="./js/jquery-3.5.1.js" charset="utf-8"></script>
<script>
$(document).ready(function(){
var zg=[];//匹配到的字符串所在text标签在html整个text标签中位置的数组中)
var n=0;//该定位到第几个匹配到的位置,输入框变更内容后,多个内容可按回车轮番定位到对应位置
var v='';//
var bs='#FC03F5';//标记色
var jz_str=[];//所有text标签的fill属性的数组
$("text").each(function(){
	jz_str.push($(this).attr('fill'));
});
//输入框内容变化后匹配并定位
$('#search_box').on("input",function(){
	searchDomain();
});
$(document).keydown(function(event){
	if(event.keyCode==13 && zg.length>0){
		var ts=$('text').eq(zg[n]).closest("svg").offset().top;//滚动条要滚动到的高度
		$("html,body").animate({scrollTop:ts+"px"}, 500);
		n=n+1;
		//滚到底后,继续从第一个开始滚动
		if(n>=zg.length){
			n=0;
		}
	}
});	
function searchDomain() {
	zg=[];
    var searchText = $("#search_box").val();
    //循环text标签匹配内容后标记
    $("text").each(function (index,value) {
        var dataVal = $(this).text();
		if(searchText !='' && searchText != null && dataVal != "" && dataVal != null && dataVal.indexOf(searchText) != -1){
			$(this).attr('fill',bs);//匹配到的属性值更改
			zg.push(index);//匹配到的记住第几个位置对应text在html中真实位置
        }else{
			if($(this).attr('fill')==bs){
				$(this).attr('fill',jz_str[index]);//没有匹配到的还原原属性值
			}
		}
    });
	if(zg.length>0){
		var t=$('text').eq(zg[0]).closest("svg").offset().top;//获取当前标签顶部距离页面顶部的高度
		$("html,body").animate({scrollTop:t+"px"}, 500);//定位到第一个位置
	}
	//
	if(zg.length>1){
		n=1;
	}else{
		n=0;
	}
}
});
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值