0

我需要通过单击链接来过滤某个表格行。

function filterRows(statusName) {
         $("#mainTable > tbody > tr").find(statusName).each( function () {
             alert($(this));
             //the alert is not shown

         });
     }

<a class="rejected" href="#" onclick="filterRows('rejected');">rejected</a>
<a class="new" href="#" onclick="filterRows('new');">new</a>

<table id="mainTable">
  <thead>
   <tr>
     <td>col1</td>
     <td>col2</td>
   </tr>
 </thead>
 <tbody class="Content">
  <tr class="rejected">
    <td>data1</td>
    <td>data12</td>
  </tr>
  <tr>
    <td>data13</td>
    <td>data15</td>
  </tr>
  <tr  class="new">
    <td>data16</td>
    <td>data18</td>
  </tr>
</tbody>

但它不工作,甚至alert($(this))没有。有什么建议么?

4

3 回答 3

2

我修改了选择器如下:

function filterRows(statusName) {
    $("#mainTable tbody tr."+statusName).each( function () {
        console.log(this);
        $(this).hide();
    });
}

可以进一步简化为:

function filterRows(statusName) {
    $("#mainTable tbody tr."+statusName).hide();
}

实现过滤器

但是,如果您尝试实现基于存储为类的数据的 jQuery 过滤器,您可以执行以下操作:

function filterRows(statusName) {
    $("#mainTable tbody tr."+statusName).show();
    $("#mainTable tbody tr").not("."+statusName).hide();
}

这将显示匹配“statusName”的行,但同样重要的是它会隐藏不匹配的行。记得添加清除过滤器的功能!

于 2012-07-10T07:53:26.247 回答
0

Guy David 是正确的 - 将您的 HTML 更改为:

<table id="mainTable">
 <thead>
   <tr>
     <td>col1</td>
     <td>col2</td>
   </tr>
 </thead>
 <tbody>
  <tr class="rejected">
    <td>data1</td>
    <td>data12</td>
  </tr>
  <tr>
    <td>data13</td>
    <td>data15</td>
  </tr>
  <tr class="new">
    <td>data16</td>
    <td>data18</td>
  </tr>
 </tbody>
 ...
于 2012-07-10T07:44:38.550 回答
0

或者 :

$('a').click(function(e){

    $('.'+e.target.className).not('a').hide();

});
于 2012-07-10T07:47:39.313 回答