查询绑定数据岛的表格中的文本并修改显示方式的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 相关文章推荐
jQuery 获取兄弟元素的几种不错方法
May 23 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
jquery实现滑动特效代码
Aug 10 Javascript
跟我学习javascript的全局变量
Nov 16 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
Feb 08 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
微信小程序实现弹出菜单
Jul 19 Javascript
javascript实现倒计时效果
Feb 17 Javascript
Javascript实现html转pdf高清版(提高分辨率)
Feb 19 Javascript
Vue自定义组件双向绑定实现原理及方法详解
Sep 03 Javascript
vscode中使用npm安装babel的方法
Aug 02 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
我的群发邮件程序
2006/10/09 PHP
第一节--面向对象编程
2006/11/16 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
php 远程关机操作的代码
2008/12/05 PHP
PHP form 表单传参明细研究
2009/07/17 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
在HTML文档中嵌入JavaScript的四种方法
2018/05/07 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
python正则-re的用法详解
2019/07/28 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
keras输出预测值和真实值方式
2020/06/27 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
生产现场工艺工程师岗位职责
2013/11/28 职场文书
医学生自荐信范文
2013/12/03 职场文书
利群广告词
2014/03/20 职场文书
安全生产月演讲稿
2014/05/09 职场文书
售后客服个人自我评价
2014/09/14 职场文书
校园安全广播稿范文
2014/09/25 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
小学生教师节广播稿
2015/08/19 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
python多次执行绘制条形图
2022/04/20 Python