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>  
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭