<div class="codetitle"> <span><a style="CURSOR: pointer" data="88215" class="copybut" id="copybut88215" onclick="doCopy('code88215')"><u>コードをコピーします</u></a></span> コードは次のとおりです。</div> <div class="codebody" id="code88215"> <br><script language="JavaScript"> >function findAll (s){ <BR>if(s.length==0){ <BR>alert("クエリキーワードを入力してください") <BR><BR>s=encode(s); ; <br>var TDs=document.all.DataT1.all.tags("TD"); <br>var num=0; <BR>for(var i=0;i<TDs.length;i ) 🎜>var tdObj=TDs[i]; <BR>var obj=tdObj.childNodes[0]; <BR>if(!obj.className || obj.className!="highlight"){ <BR>var t= obj.innerHTML .replace(/<spans class=.?highlight.?>([^<>]*)/gi,"$1"); <BR>obj.innerHTML=t ; <BR>var cnt=loopSearch(s,obj); <BR>t=obj.innerHTML; ({(?!/searchHL})|[^{])* )/ searchHL}/g; <BR>t=t.replace(r,"<span class='highlight'>$1"); >num= num cnt; <BR>} <BR>} <BR>alert("キーワード "num "at" を検索) <BR>関数 encode(s){ <BR>return s .replace(/&/g,"&").replace(/,"<").replace(/>/g,">").replace(/([\.*[ ] ()$^])/g,"\$1"); <BR>} <BR>関数 decode(s){ <BR>return s.replace(/\([\.*[]()$^ ] )/g,"$1").replace(/>/g,">").replace(/,"<").replace(/&/g,"&"); <BR>} <br><br>関数loopSearch(s,obj){ <BR>var cnt=0; <BR>if(obj.nodeType==3){ <BR>cnt=replace(s,obj) ; <BR>return cnt; <BR>} <BR>for(var i=0,c;c=obj.childNodes[i];i ){ <br>if(!c.className || c.className! = "ハイライト") <br>cnt =loopSearch(s,c); <BR><BR>} <BR>return cnt; <BR><BR>関数 replace(s,dest){ <BR> var r=new RegExp(s,"gi"); <BR>var t=dest.nodeValue; <BR>var arr=new Array() ; <br>var a=""; <br>if(tm=t.match(r)){ <BR>cnt=tm.length; toString (); <BR>arr=a.split(","); <br>for(var i=0;i<arr.length;i ) <br>b="{searchHL}" arr[i] " {/searchHL}"; <BR>t=t.replace(r,b); <BR>return <BR>} <BR><BR> < ;/script> <BR><style type="text/css"> <BR>.highlight{background:blue;font-weigh:bold;color:black;} <BR> 🎜 ><BR> <BR>上記のメソッドには 2 つの注意点があります: 1. findAll で obj の最小単位を取得します。そうしないと、置換によって混乱が生じます。実際には、これは主にデータに関連していることがわかりました。 2. replace メソッドはテーブルに関連する tm を分割する必要はありません。<BR><BR>通常のテキストであれば、次のように記述できます <BR> <BR><BR><BR><BR><BR>コードをコピー<br><br><BR> コードは次のとおりです:<BR><BR> <BR> <script language="JavaScript"> </script> </div>function findAll(s){ <br>if (s.length==0){ <br>alert('検索キーワードが入力されていません! '); <br>return false; <br>} <br>s=encode(s); var obj=document.getElementsByTagName("body")[0]; .replace(/<spans class=".?highlight.?">([^]*)/gi,"$1"); >var cnt=loopSearch(s,obj); <div class="codetitle">t=obj.innerHTML <span>var r=/{searchHL}(({(?!/searchHL})|[^{])*){/searchHL }/g <a style="CURSOR: pointer" data="79929" class="copybut" id="copybut79929" onclick="doCopy('code79929')">t=t.replace(r,"<span class="highlight">$1</span>"); <u>obj.innerHTML=t;キーワード " cnt ") </u>} </a>function replace(s,dest){ </span>var r=new RegExp(s,"g"); </div>var tm=null; t=dest.nodeValue; <div class="codebody" id="code79929">var cnt=0; <br>if (tm=t.match(r)){ <br>t=t.replace(r ," {searchHL}" デコード "{/searchHL}") <br>dest.nodeValue=t; <br>} <br>return cnt; <br>} <br><br>> ; <br><br> <br><br><br>html 部分<br><br><br><br><br>コードをコピー<br><br><br> コードは次のとおりです: <br><div class="codebody" id="code57903"> <br><xml id="DataBinding1" src="datasource.xml"></xml> <br> <br><input name="s" id="s" title="搜検索内容:"><input type="submit" value="搜検索" onclick="findAll(s.value);return false;">; <br><table width="100%" valign="top" datasrc="#DataBinding1" id="DataT1" border="1" cellpadding="3"> <br> <br><tr> <br><th>ID</th> <br><th>名前</th> <br><th>説明</th> <br> </tr> <br>頭> <br> <br><tr> <br><td> </td> <br><td><span name="name" id="name" datafld="CODE_NAME"> </span></td> <br><td><span name="desc" id="desc" datafld="CODE_DESC"> </span></td> <br> </tr> <br> <br> </table> <br> </div> </div></spans>