查詢綁定數(shù)據(jù)島的表格中的文本并修改顯示方式的js代碼
<script language="JavaScript">
function findAll(s){
if(s.length==0){
alert("請(qǐng)輸入查詢關(guān)鍵字");
}
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("查找到關(guān)鍵字"+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>
以上方法需要注意的有兩點(diǎn):1,在findAll 中obj取到最小單位,否則的話替換會(huì)出亂,我在實(shí)踐中體會(huì)這一點(diǎn)主要是和數(shù)據(jù)島綁定有關(guān),一般的文本是不需要這么小心的.2,replace方法將tm拆分成數(shù)組,也和表格有關(guān),一般的文本不需要拆分
如果是一般的文本可以如下寫
<script language="JavaScript">
function findAll(s){
if (s.length==0){
alert('搜索關(guān)鍵詞未填寫!');
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("搜索到關(guān)鍵詞"+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="搜索內(nèi)容:"/><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>
- angularjs實(shí)現(xiàn)table表格td單元格單擊變輸入框/可編輯狀態(tài)示例
- js生成動(dòng)態(tài)表格并為每個(gè)單元格添加單擊事件的方法
- vuejs element table 表格添加行,修改,單獨(dú)刪除行,批量刪除行操作
- angularJs 表格添加刪除修改查詢方法
- JS實(shí)現(xiàn)動(dòng)態(tài)表格的添加,修改,刪除功能(推薦)
- JS動(dòng)態(tài)修改表格cellPadding和cellSpacing的方法
- js動(dòng)態(tài)修改表格行colspan列跨度的方法
- javascript修改表格背景色實(shí)例代碼分享
- js實(shí)現(xiàn)單擊可修改表格
相關(guān)文章
各瀏覽器對(duì)document.getElementById等方法的實(shí)現(xiàn)差異解析
這篇文章主要是對(duì)各瀏覽器對(duì)document.getElementById等方法的實(shí)現(xiàn)差異進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12JS基于遞歸實(shí)現(xiàn)倒計(jì)時(shí)效果的方法
這篇文章主要介紹了JS基于遞歸實(shí)現(xiàn)倒計(jì)時(shí)效果的方法,結(jié)合實(shí)例形式分析了javascript基于遞歸算法實(shí)現(xiàn)倒計(jì)時(shí)功能的相關(guān)操作技巧,需要的朋友可以參考下2016-11-11javascript獲取dom的下一個(gè)節(jié)點(diǎn)方法
這篇文章主要介紹了javascript獲取dom的下一個(gè)節(jié)點(diǎn)方法,實(shí)現(xiàn)在頁面點(diǎn)擊加減按鈕數(shù)字的累加,需要的朋友可以參考下2014-09-09基于javascript html5實(shí)現(xiàn)3D翻書特效
這篇文章主要介紹了基于javascript html5實(shí)現(xiàn)翻書特效的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03弱類型語言javascript開發(fā)中的一些坑實(shí)例小結(jié)【變量、函數(shù)、數(shù)組、對(duì)象、作用域等】
這篇文章主要介紹了弱類型語言javascript開發(fā)中的一些坑,結(jié)合實(shí)例形式總結(jié)分析了javascript開發(fā)中關(guān)于變量、函數(shù)、數(shù)組、對(duì)象、作用域等相關(guān)知識(shí)點(diǎn)常見易錯(cuò)問題,需要的朋友可以參考下2019-08-08js動(dòng)態(tài)設(shè)置鼠標(biāo)事件示例代碼
動(dòng)態(tài)設(shè)置鼠標(biāo)事件的方法有很多,接下來為大家介紹下js中是如何做到的,感興趣的朋友不要錯(cuò)過2013-10-10原生JavaScript實(shí)現(xiàn)進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了原生JavaScript實(shí)現(xiàn)進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02JavaScript數(shù)組對(duì)象賦值用法實(shí)例
這篇文章主要介紹了JavaScript數(shù)組對(duì)象賦值用法,涉及javascript用戶交互及針對(duì)數(shù)組的排序技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08