js实现表内搜索

< table  id ="test" >
    
< tr >
        
< td >< input  value ="testsetsetestestsetsetsetset" ></ input ></ td >
        
< td >< input  value ="aaabbbaaabbbaaa" ></ input ></ td >
        
< td >< input  value ="testsetsetestestsetsetsetset" ></ input ></ td >
    
</ tr >
    
< tr >
        
< td >< input  value ="aaacccbbbbcccc" ></ input ></ td >
        
< td >< input  value ="testsetsetestestsetsetsetset" ></ input ></ td >
        
< td >< input  value ="testsetsetestestsetsetsetset" ></ input ></ td >
    
</ tr >
    
</ table >
< textarea  name ="txtBox"  rows ="7"  cols ="50"  id ="txtBox" >

</ textarea >< br >

< input  type ="text"  value ="输入要查询的内容"  id ="txtFind" >

< input  type ="button"  value ="表查找"  onclick ="searchclick()" >
< input  type ="button"  value ="简单查找"  onclick ="findText(txtFind.value)" >

< script  language ="javascript" >
var searchobj = new Object;
var rng = new Object;
searchobj.row 
= -1;
searchobj.col 
= -1;
function searchclick(){
    findText2(
"test",txtFind.value);
}
    
function findText2(tabname,str){
    
var tab = document.getElementById(tabname);
    
var rowobj = tab.rows;
    
//行数
    var rownum = rowobj.length;
    
if(searchobj.row != -1 && searchobj.col != -1 ){
        
var trobj = tab.rows[searchobj.row];
        
//列数
        var tdnum = trobj.cells.length;
        
//定义一个变量,作为moveStart()函数的偏移量,即开始点跳过选择文本
       var num = 0;
       
if(document.selection)   
       num 
= document.selection.createRange().text.length;
       
//每次调用函数,结束点都为末尾,而开始点是跳过选择文本后的新开始点 
       rng.moveStart("character",num);
       rng.moveEnd(
"character",rowobj[searchobj.row].cells[searchobj.col].childNodes[0].value.length);
       
//搜索到后选择文本   
       if(rng.findText(str))
       rng.select();
        
if(rng.text==str){
            
return;
        }

        
//如果上次查询结果是最后一列
        if(searchobj.col < tdnum-1){                    
            
for(var ii=searchobj.col+1;ii<tdnum;ii++){
                rng 
= rowobj[searchobj.row].cells[ii].childNodes[0].createTextRange();
                
//搜索到后选择文本   
               if(rng.findText(str))
               rng.select();
                
if(rng.text==str){
                    searchobj.col 
= ii;
                    
return;
                }

            }

        }
    
        
//如果上次查询结果不是最后一行
        if(searchobj.row != rownum-1){
            
for(var i=searchobj.row+1;i<rownum;i++){
                
var trobj = tab.rows[i];
                
//列数
                var tdnum = trobj.cells.length;
                
for(var j=0;j<tdnum;j++){
                    
if(rowobj[i].cells[j].childNodes[0].tagName == "INPUT"){
                        rng 
= rowobj[i].cells[j].childNodes[0].createTextRange();
                        
//搜索到后选择文本   
                       if(rng.findText(str))
                       rng.select();
                        
if(rng.text==str){
                            searchobj.row 
= i;
                            searchobj.col 
= j;
                            
return;
                        }

                    }

                    
if(i==rownum-1 && j==tdnum-1){
                        searchobj.row 
= -1;
                        searchobj.col 
= -1;
                        findText2(tabname,str);                
                    }

                }

            }

        }

        
else{
            searchobj.row 
= -1;
            searchobj.col 
= -1;
            findText2(tabname,str);
        }
                
    }

    
else
    
{
        
for(var i=0;i<rownum;i++){
            
var trobj = tab.rows[i];
            
//列数
            var tdnum = trobj.cells.length;
            
for(var j=0;j<tdnum;j++){
                
if(rowobj[i].cells[j].childNodes[0].tagName == "INPUT"){
                    rng 
= rowobj[i].cells[j].childNodes[0].createTextRange();
                    
//搜索到后选择文本   
                   if(rng.findText(str))
                   rng.select();
                    
if(rng.text==str){
                        searchobj.row 
= i;
                        searchobj.col 
= j;
                        
return;
                    }

                }

                
if(i==rownum-1 && j==tdnum-1){
                    alert(
"没有您要查找的内容");
                }

            }

        }

    }
    
}

var rng = document.body.createTextRange();
function findText(str)
{
    
debugger;
   
if(str=="")
   
return;
   
//定义一个变量,作为moveStart()函数的偏移量,即开始点跳过选择文本
   var num = 0;
   
if(document.selection)   
   num 
= document.selection.createRange().text.length;
   
//每次调用函数,结束点都为末尾,而开始点是跳过选择文本后的新开始点 
   rng.moveStart("character",num);
   rng.moveEnd(
"character",txtBox.value.length);
   
//搜索到后选择文本   
   if(rng.findText(str))
   rng.select();
   
//搜索到最后的范围还是找不到,则提示搜索完毕,并重新恢复rng最初的范围(否则无法执行新搜索)   
   if(rng.text!=str)
   
{   
   alert(
"搜索完毕");
   rng 
= txtBox.createTextRange();
   }

rng 
= txtBox.createTextRange();
}
   

</ script >   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值