2015-11-05 60 views
1

我试图获得一个表来显示只有具有与数组的值之一相匹配的td的行。jQuery/Javascript - 只显示tr与td的匹配数组

我已经创建了一个愚蠢的代码的特定部分jsfiddle。我不知道为什么这不起作用,所以将不胜感激。

不起作用的部分显然是找到与数组值td's匹配的部分。

下面是代码:

 $('body').on('click', '#zipButton', function() { 
        var arrayTest = [123,124,125,126] 
        var tr = find('tbody > tr'); 
        $(tr).hide(); 
          for(i=0;i<arrayTest.length;i++) { 
          $('.zipTd').each(function() { 
           ($(this).text() == arrayTest[i].toString()) ? $(this).parent().show() : $(this).parent().hide(); 
          }); 
          }; 
     }); 

http://jsfiddle.net/m4orLpd3/1/

感谢

+0

在我看来,你应该尝试为创建要显示的唯一匹配元素的新数组。然后执行搜索并添加元素。之后,显示新的数组:) –

+0

不幸的是,这是行不通的,因为这是一个愚蠢的版本。原来甚至没有显示他们被过滤的数字,它的工作列表表。但是,谢谢:) – Romtim

回答

0

您可以尝试使用jQuery的.filter和JavaScript Array.prototype.filter做到这一点。

检查下面的例子:

var array = [123, 124, 125, 126]; 
 

 
$('body').on('click', 'button', function() { 
 

 
    var filter = function() { 
 

 
    var match = false; 
 

 
    $(this).find('td').each(function() { 
 

 
     var currentText = $(this).text(); 
 

 
     var filtered = array.filter(function(value) { 
 
     return value == currentText; 
 
     }); 
 

 
     if (filtered.length > 0) { 
 
     match = true; 
 
     } 
 

 
    }); 
 

 
    return match; 
 

 
    }; 
 

 
    $('tr').hide().filter(filter).show(); 
 

 
});
td { 
 
    border: 1px solid #000; 
 
    padding: 5px 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button type="button">trigger</button> 
 

 
<table> 
 
    <tr> 
 
    <td>123</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>124</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>127</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>123</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>324</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>127</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>523</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>144</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
    <tr> 
 
    <td>127</td> 
 
    <td>dummy</td> 
 
    </tr> 
 
</table>

+0

谢谢!这完美的作品,不会加载客户端太多:) – Romtim

0

您可以使用过滤器这个

$('body').on('click', '#zipButton', function() { 
    var arrayTest = [123, 124, 125, 126] 
    $(".zipTd").filter(function() { 
     return arrayTest.indexOf(parseInt($(this).text().trim())) == -1 
    }).closest("tr").hide(); 
}); 

Fiddle

编辑

$('body').on('click', '#zipButton', function() { 
    $(".zipTd").closest("tr").hide(); 
    var arrayTest = [123, 124, 125, 126] 
    $(".zipTd").filter(function() { 
     return arrayTest.indexOf(parseInt($(this).text().trim())) >= 0 
    }).closest("tr").show(); 
}); 

Edited Fiddle

+0

谢谢,但这与需要的相反。它隐藏了我需要显示的值,并显示了我需要隐藏的值。 – Romtim

+0

查看新编辑.. –

+0

谢谢,现在有点作品了。唯一的问题是,现在它将浏览器挂起10秒钟,而您之前的代码花费了一两秒钟时间,是否有一个特定的原因,为什么现在需要永久?对于您的信息,我的表中的行数大约为2500 – Romtim