查询绑定数据岛的表格中的文本并修改显示方式的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 相关文章推荐
HTML node相关的一些资料整理
Jan 01 Javascript
Jquery cookie操作代码
Mar 14 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
Dec 16 Javascript
AngularJS语法详解
Jan 23 Javascript
jQuery超酷平面式时钟效果代码分享
Mar 30 Javascript
jquery中实现时间戳与日期相互转换
Apr 12 Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 Javascript
浅谈ES6新增的数组方法和对象
Aug 08 Javascript
javascript 中模板方法单例的实现方法
Oct 17 Javascript
JS构造一个html文本内容成文件流形式发送到后台
Jul 31 Javascript
使用webpack编译es6代码的方法步骤
Apr 28 Javascript
JavaScript实现手风琴效果
Feb 18 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 feof用来识别文件末尾字符的方法
2010/08/01 PHP
ThinkPHP模型详解
2015/07/27 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
javascript动态加载三
2012/08/22 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
jQuery实现给页面换肤的方法
2015/05/30 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
vue-cli3全面配置详解
2018/11/14 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
Python中集合类型(set)学习小结
2015/01/28 Python
详解Python中的Cookie模块使用
2015/07/06 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
安装docker-compose的两种最简方法
2019/07/30 Python
django创建超级用户过程解析
2019/09/18 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
英语简历自我评价
2014/01/26 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
秋冬农业生产标语
2014/10/09 职场文书
入党群众意见范文
2015/06/02 职场文书
《火烧云》教学反思
2016/02/23 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS