表格、列表关键字搜索且高亮显示的纯JavaScript实现

一、简介

之前看到在eclipse、intellij等ide编辑工具在搜索代码片段时,可以用到模糊匹配的快捷搜索,搜索到的关键字还可以高亮显示,感觉挺方便,用户体验不错,今天自己也想实现一个属于自己的高亮搜索组件,我用js来实现,可以用于table、ul列表;使用该组件时,可以绑定keyup事件,这样在你一边打字的同时,高亮匹配搜索一边就在进行,这个功能在网页上还是挺有用的,下面是具体的代码:

	/**
	* Highlight show for list search,默认支持UL->LI列表,可以通过在TR元素中设置class:hiddenRootElementClassName用于table
 	* @author zhangDa
 	* @param settingOptions 参数设置
 	*/
	function highLightShow(settingOptions){
		this.rootElement = settingOptions.rootElement;
		if(!this.rootElement){
			console.log("The rootElement do not exisits");
			return;
		}
		this.excludedElementsClassName = settingOptions.excludedElementsClassName;  //忽略隐藏的元素
		this.highLightColor = settingOptions.highLightColor?settingOptions.highLightColor:"yellow";
		this.hiddenRootElementClassName = settingOptions.hiddenRootElementClassName;
		this.highLightClassName = "zd-highlight";
		var replaceDom = "<span style='text-decoration: underline; color: "+this.highLightColor+";' class='" + this.highLightClassName + "'>" + "$1" + "</span>";
		var exp = "";
		var exp2 = "";
		
		/**
		 * 模糊搜索
		 * @param element 根元素
		 * @param matchObj  表示在某行元素中是否有与文本匹配上的关键字
		 * @return int 显示的行数
		 */
		this.search = function(queryContent){
			this.queryContent = queryContent;
			queryContent = queryContent.replace(/\./, "\\.");
			exp = new RegExp("(" + queryContent + ")", "g");
			exp2 = new RegExp(queryContent);
			this.recursionSearch(this.rootElement, {ifMatched: false});
			return $(this.rootElement).find("."+this.hiddenRootElementClassName+":visible").length;
		}
		
		/**
		 * 递归查找关键字
		 * @param element 相对根元素
		 * @return boolean  true表示要删除下一级
		 */
		this.recursionSearch = function(element, matchObj){
			if(typeof(this.excludedElementsClassName)!="undefined" && $.inArray(element.getAttribute("class"), this.excludedElementsClassName) != -1){
				return false;  // 对于不需匹配内容的元素直接返回,不删除行
			}
			
			if(element.childElementCou
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值