有一个表格,通过文本框输入条件过滤单元格,一行中若无符合条件的单元格便隐藏这一行,已经实现。
可现在问题来了,如果有单元格是跨行的可怎么办?
像下面的这个例子中的表格,单元格1跨了三行,过滤1的时候只能显示(1,a,x)也就是第一小行。可我想在过滤1的时候把被他跨越的几行都显示出来。
反之,在输入b过滤的时候只显示1,b,y行,这么说可能不太清楚,我把想要的效果写在Body中了,麻烦高手能把代码保存一下帮帮我看看。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<script type="text/javascript">var filtercolumns="";
function setFilter(Tbl) { //限制某列埠参加过滤
//var bgrColor;
//控制不可过滤列
for(var i=0;i<Tbl.rows[0].cells.length;i++) {
if(Tbl.rows[0].cells[i].getAttribute("filter")!=null &&Tbl.rows[0].cells[i].getAttribute("filter")=="false")
//判断触发事件的元素
{
//for(var j=0;j<Tbl.rows.length;j++) {
//Tbl.rows[j].cells[i].style.backgroundColor=bgrColor; //改变限制列的颜色
//}
var temp = filtercolumns+i+ '|';
filtercolumns = temp;
}
}
}function Search(Tbl,TextValue,FrontRows,BackRows) { //按输入的条件过滤单元格
setFilter(Tbl);
var count=0;
var FrontRows; //头几行不参加过滤
var i=FrontRows; //后几行步参加过滤
var BackRows;
var keyWord=TextValue.value;
if(keyWord!="") {
for(i;i <Tbl.rows.length-BackRows;i++) {
if(filtercolumns=="") {
var tr=Tbl.rows[i];
if(tr.innerHTML.indexOf(keyWord)==-1)
tr.style.display="none";
else {
tr.style.display="block";
count++;
}
}
else {
var tfilter = filtercolumns.substr(0,filtercolumns.length-1);
var columns = tfilter.split( '|');
var html = "";
for(var k=0;k <Tbl.rows[i].cells.length;k++) {
var flag = true;
for(var j=0;j <columns.length;j++) {
var col= columns[j];
if(col==k) flag=false;
}
if(flag==true) {
html += Tbl.rows[i].cells[k].innerHTML;
}
}
if(html.indexOf(keyWord)==-1)
Tbl.rows[i].style.display="none";
else {
Tbl.rows[i].style.display="block";
count++;
}
}
}
}
if(count==0) {
ListAll(Tbl);
alert( 'No Find!');
}
} function ListAll(Tbl) {
for(var i=0;i <Tbl.rows.length;i++) {
Tbl.rows[i].style.display="block";
}
}
</script>
<table id=FilTable width="425" border="1">
<tr>
<th scope="col">th1</th>
<th scope="col">th2</th>
<th scope="col">th3</th>
</tr>
<tr>
<td rowspan="3">1</td>
<td>a</td>
<td>x</td>
</tr> <tr>
<td>b</td>
<td>y</td>
</tr>
<tr>
<td>a</td>
<td>f</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>3</td>
</tr>
</table>
<input name="condtext" id="condtext" type="text" style="width: 200">
<input type="button" value="查找" onclick="Search(FilTable,condtext,FrontRows=1,BackRows=0);">
<input type="button" value="返回" onclick="ListAll(FilTable)"><br><br><br>
希望得到的效果:<br>
在输入1查询的时候显示效果如下:<br>
<table width="425" border="1">
<tr>
<th scope="col">th1</th>
<th scope="col">th2</th>
<th scope="col">th3</th>
</tr>
<tr>
<td rowspan="3">1</td>
<td>a</td>
<td>x</td>
</tr> <tr>
<td>b</td>
<td>y</td>
</tr>
<tr>
<td>a</td>
<td>f</td>
</tr>
</table>
<br>
在输入b查询的时候显示效果如下:<br>
<table width="425" border="1">
<tr>
<th scope="col">th1</th>
<th scope="col">th2</th>
<th scope="col">th3</th>
</tr>
<tr>
<td>1</td>
<td>b</td>
<td>y</td>
</tr>
</table></body>
</html>
可现在问题来了,如果有单元格是跨行的可怎么办?
像下面的这个例子中的表格,单元格1跨了三行,过滤1的时候只能显示(1,a,x)也就是第一小行。可我想在过滤1的时候把被他跨越的几行都显示出来。
反之,在输入b过滤的时候只显示1,b,y行,这么说可能不太清楚,我把想要的效果写在Body中了,麻烦高手能把代码保存一下帮帮我看看。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<script type="text/javascript">var filtercolumns="";
function setFilter(Tbl) { //限制某列埠参加过滤
//var bgrColor;
//控制不可过滤列
for(var i=0;i<Tbl.rows[0].cells.length;i++) {
if(Tbl.rows[0].cells[i].getAttribute("filter")!=null &&Tbl.rows[0].cells[i].getAttribute("filter")=="false")
//判断触发事件的元素
{
//for(var j=0;j<Tbl.rows.length;j++) {
//Tbl.rows[j].cells[i].style.backgroundColor=bgrColor; //改变限制列的颜色
//}
var temp = filtercolumns+i+ '|';
filtercolumns = temp;
}
}
}function Search(Tbl,TextValue,FrontRows,BackRows) { //按输入的条件过滤单元格
setFilter(Tbl);
var count=0;
var FrontRows; //头几行不参加过滤
var i=FrontRows; //后几行步参加过滤
var BackRows;
var keyWord=TextValue.value;
if(keyWord!="") {
for(i;i <Tbl.rows.length-BackRows;i++) {
if(filtercolumns=="") {
var tr=Tbl.rows[i];
if(tr.innerHTML.indexOf(keyWord)==-1)
tr.style.display="none";
else {
tr.style.display="block";
count++;
}
}
else {
var tfilter = filtercolumns.substr(0,filtercolumns.length-1);
var columns = tfilter.split( '|');
var html = "";
for(var k=0;k <Tbl.rows[i].cells.length;k++) {
var flag = true;
for(var j=0;j <columns.length;j++) {
var col= columns[j];
if(col==k) flag=false;
}
if(flag==true) {
html += Tbl.rows[i].cells[k].innerHTML;
}
}
if(html.indexOf(keyWord)==-1)
Tbl.rows[i].style.display="none";
else {
Tbl.rows[i].style.display="block";
count++;
}
}
}
}
if(count==0) {
ListAll(Tbl);
alert( 'No Find!');
}
} function ListAll(Tbl) {
for(var i=0;i <Tbl.rows.length;i++) {
Tbl.rows[i].style.display="block";
}
}
</script>
<table id=FilTable width="425" border="1">
<tr>
<th scope="col">th1</th>
<th scope="col">th2</th>
<th scope="col">th3</th>
</tr>
<tr>
<td rowspan="3">1</td>
<td>a</td>
<td>x</td>
</tr> <tr>
<td>b</td>
<td>y</td>
</tr>
<tr>
<td>a</td>
<td>f</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>3</td>
</tr>
</table>
<input name="condtext" id="condtext" type="text" style="width: 200">
<input type="button" value="查找" onclick="Search(FilTable,condtext,FrontRows=1,BackRows=0);">
<input type="button" value="返回" onclick="ListAll(FilTable)"><br><br><br>
希望得到的效果:<br>
在输入1查询的时候显示效果如下:<br>
<table width="425" border="1">
<tr>
<th scope="col">th1</th>
<th scope="col">th2</th>
<th scope="col">th3</th>
</tr>
<tr>
<td rowspan="3">1</td>
<td>a</td>
<td>x</td>
</tr> <tr>
<td>b</td>
<td>y</td>
</tr>
<tr>
<td>a</td>
<td>f</td>
</tr>
</table>
<br>
在输入b查询的时候显示效果如下:<br>
<table width="425" border="1">
<tr>
<th scope="col">th1</th>
<th scope="col">th2</th>
<th scope="col">th3</th>
</tr>
<tr>
<td>1</td>
<td>b</td>
<td>y</td>
</tr>
</table></body>
</html>
<tr>
<td>
1</td>
<td>
<ul>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
</ul>
</td>
<td>
<ul>
<li>a</li>
<li>a</li>
</ul>
</td>
</tr>
</table>这样类似的结构