查询绑定数据岛的表格中的文本并修改显示方式的js代码


Posted in Javascript onDecember 15, 2009
<script language="JavaScript"> 
function findAll(s){ 
if(s.length==0){ 
alert("请输入查询关键字"); 
} s=encode(s); 
var TDs=document.all.DataT1.all.tags("TD"); 
var num=0; 
for(var i=0;i<TDs.length;i++){ 
var tdObj=TDs[i]; 
var obj=tdObj.childNodes[0]; 
if(!obj.className || obj.className!="highlight"){ 
var t=obj.innerHTML.replace(/<span\s+class=.?highlight.?>([^<>]*)<\/span>/gi,"$1"); 
obj.innerHTML=t; 
var cnt=loopSearch(s,obj); 
t=obj.innerHTML; 
var r=/{searchHL}(({(?!\/searchHL})|[^{])*){\/searchHL}/g; 
t=t.replace(r,"<span class='highlight'>$1</span>"); 
obj.innerHTML=t; 
num=num+cnt; 
} 
} 
alert("查找到关键字"+num+"处"); 
} 
function encode(s){ 
return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1"); 
} 
function decode(s){ 
return s.replace(/\\([\\\.\*\[\]\(\)\$\^])/g,"$1").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&"); 
} 
function loopSearch(s,obj){ 
var cnt=0; 
if(obj.nodeType==3){ 
cnt=replace(s,obj); 
return cnt; 
} 
for(var i=0,c;c=obj.childNodes[i];i++){ 
if(!c.className || c.className!="highlight") 
cnt+=loopSearch(s,c); 
} 
return cnt; 
} 
function replace(s,dest){ 
var r=new RegExp(s,"gi"); 
var tm=null; 
var t=dest.nodeValue; 
var cnt=0; 
var arr=new Array(); 
var a=""; 
var b=""; 
if(tm=t.match(r)){ 
cnt=tm.length; 
a=tm.toString(); 
arr=a.split(","); 
for(var i=0;i<arr.length;i++) 
b="{searchHL}"+arr[i]+"{/searchHL}"; 
t=t.replace(r,b); 
dest.nodeValue=t; 
} 
return cnt; 
} 
</script> 
<style type="text/css"> 
.highlight{background:blue;font-weigh:bold;color:black;} 
</style>

以上方法需要注意的有两点:1,在findAll 中obj取到最小单位,否则的话替换会出乱,我在实践中体会这一点主要是和数据岛绑定有关,一般的文本是不需要这么小心的.2,replace方法将tm拆分成数组,也和表格有关,一般的文本不需要拆分

如果是一般的文本可以如下写

<script language="JavaScript"> 
function findAll(s){ 
if (s.length==0){ 
alert('搜索关键词未填写!'); 
return false; 
} 
s=encode(s); 
var obj=document.getElementsByTagName("body")[0]; 
var t=obj.innerHTML.replace(/<span\s+class=.?highlight.?>([^<>]*)<\/span>/gi,"$1"); 
obj.innerHTML=t; 
var cnt=loopSearch(s,obj); 
t=obj.innerHTML 
var r=/{searchHL}(({(?!\/searchHL})|[^{])*){\/searchHL}/g 
t=t.replace(r,"<span class='highlight'>$1</span>"); 
obj.innerHTML=t; 
alert("搜索到关键词"+cnt+"处") 
} 
function replace(s,dest){ 
var r=new RegExp(s,"g"); 
var tm=null; 
var t=dest.nodeValue; 
var cnt=0; 
if (tm=t.match(r)){ 
cnt=tm.length; 
t=t.replace(r,"{searchHL}"+decode(s)+"{/searchHL}") 
dest.nodeValue=t; 
} 
return cnt; 
} </script>

html部分

<XML ID="DataBinding1" SRC="datasource.xml"></XML> 
<body> 
<input name="s" id="s" title="搜索内容:"/><input type="submit" value="搜索" onClick="findAll(s.value);return false;"/> 
<table width="100%" valign="top" DATASRC="#DataBinding1" id="DataT1" BORDER="1" CELLPADDING="3"> 
<thead> 
<tr> 
<th>ID</th> 
<th>Name</th> 
<th>Desc</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td><span name="ID" id="ID" datafld="CODE_ID"> </span></td> 
<td><span name="name" id="name" datafld="CODE_NAME"> </span></td> 
<td><span name="desc" id="desc" datafld="CODE_DESC"> </span></td> 
</tr> 
</tbody> 
</table> 
</body>

<?xml version="1.0" encoding="UTF-8"?> 
<INVENTORY> 
<ROW> 
<CODE_ID>PCOMM11</CODE_ID> 
<CODE_NAME>caracter handle</CODE_NAME> 
<CODE_DESC>hkdlhglfghfkgfk</CODE_DESC> 
</ROW> 
<ROW> 
<CODE_ID>PCOMM12</CODE_ID> 
<CODE_NAME>digital handle</CODE_NAME> 
<CODE_DESC>hkdlhglfghfkgfkgggg</CODE_DESC> 
</ROW> 
</INVENTORY>
Javascript 相关文章推荐
Javascript模块化编程(一)AMD规范(规范使用模块)
Jan 17 Javascript
解析js如何获取当前url中的参数值并复制给input
Jun 23 Javascript
jQuery可见性过滤选择器用法示例
Sep 09 Javascript
js仿支付宝多方框输入支付密码效果
Sep 27 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
Jan 04 Javascript
Javascript循环删除数组中元素的几种方法示例
May 18 Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 Javascript
Node实战之不同环境下配置文件使用教程
Jan 02 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
Jul 16 Javascript
深入了解JavaScript 的 WebAssembly
Jun 15 Javascript
layui监听单元格编辑前后交互的例子
Sep 16 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
Dec 15 #Javascript
Javascript attachEvent传递参数的办法
Dec 14 #Javascript
firefox下对ajax的onreadystatechange的支持情况分析
Dec 14 #Javascript
javascript document.execCommand() 常用解析
Dec 14 #Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
Dec 14 #Javascript
JQuery Tips(2) 关于$()包装集你不知道的
Dec 14 #Javascript
js 页面传参数时 参数值含特殊字符的问题
Dec 13 #Javascript
You might like
需要发散思维学习PHP
2009/06/29 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
js+css实现红包雨效果
2018/07/12 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
使用Python实现批量ping操作方法
2020/05/06 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
12月小学生校园广播稿
2014/02/04 职场文书
一年级语文教学反思
2014/02/13 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
网站出售协议书范文
2014/10/10 职场文书
给客户的检讨书
2014/12/21 职场文书
李强感恩观后感
2015/06/17 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
mysql脏页是什么
2021/07/26 MySQL