查询绑定数据岛的表格中的文本并修改显示方式的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 相关文章推荐
一段非常简单的让图片自动切换js代码
Nov 10 Javascript
jQuery 核心函数以及jQuery对象
Mar 23 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
Javascript中判断对象是否为空
Jun 10 Javascript
AngularJS Module方法详解
Dec 08 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
Oct 26 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
浅谈Webpack 持久化缓存实践
Mar 22 Javascript
vue父子组件间引用之$parent、$children
May 20 Javascript
js实现弹幕飞机效果
Aug 27 Javascript
jQuery冲突问题解决方法
Jan 19 jQuery
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的宝库目录--PEAR
2006/10/09 PHP
PHP Session 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
用python实现面向对像的ASP程序实例
2014/11/10 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
python绘制条形图方法代码详解
2017/12/19 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
python如何保存文本文件
2020/06/07 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
《秋姑娘的信》教学反思
2014/02/28 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python