我需要根据选择值过滤表格行。当选择的值为“”(空)时,必须隐藏表。如果select值为1,则表必须可见,并且必须仅显示第一个表列保持值为1的行。
问题是这个id列包含多个id,如1,2。 由于我的JQuery技能不是最好的,我需要你们帮我完成我的代码
我的选择器
<select id='mySelector'>
<option value="">Please Select</option>
<option value='1'>A</option>
<option value='2'>B</option>
<option value='3'>C</option>
</select>
我的表
<table id='myTable'>
<thead>
<tr>
<th>ids</th>
<th>name</th>
<th>address</th>
</tr>
</thead>
<tbody>
<tr>
<td>1,2</td>
<td>Jhon</td>
<td>Doe</td>
</tr>
<tr>
<td>3</td>
<td>Mike</td>
<td>Poet</td>
</tr>
<tr>
<td>2,3</td>
<td>Ace</td>
<td>Ventura</td>
</tr>
</tbody>
</table>
我的剧本
$(document).ready(function($) {
$('table').hide();
$('#mySelector').change( function(){
$('table').show();
var selection = $(this).val();
var dataset = $('#myTable').find('tr');
$.each(dataset, function(index, item) {
//help
});
});
});
这里正在运作plunker
如果您需要任何其他信息,请告诉我,我会提供。提前谢谢。
答案 0 :(得分:5)
您可以根据包含 id 的td
的内容过滤行:
您的数据集必须为$('#myTable tbody').find('tr')
,因此不会显示/隐藏thead
首先使用tr
dataset.show()
现在使用此功能过滤掉您不需要显示的tr
:
dataset.filter(function(index, item) {
return $(item).find('td:first-child').text().split(',').indexOf(selection) === -1;
}).hide();
见下面的演示:
$(document).ready(function($) {
$('table').hide();
$('#mySelector').change(function() {
$('table').show();
var selection = $(this).val();
var dataset = $('#myTable tbody').find('tr');
// show all rows first
dataset.show();
// filter the rows that should be hidden
dataset.filter(function(index, item) {
return $(item).find('td:first-child').text().split(',').indexOf(selection) === -1;
}).hide();
});
});
&#13;
/* Styles go here */
table {
border-collapse: collapse;
width: 100%;
}
th,
td {
padding: 8px;
text-align: left;
border-bottom: 1px solid #ddd;
}
.styled-select.slate {
height: 34px;
width: 240px;
}
&#13;
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
<script src="script.js"></script>
<select id='mySelector' class="styled-select slate">
<option value="">Please Select</option>
<option value='1'>A</option>
<option value='2'>B</option>
<option value='3'>C</option>
</select>
<br>
<br>
<br>
<table id='myTable'>
<thead>
<tr>
<th>ids</th>
<th>name</th>
<th>address</th>
</tr>
</thead>
<tbody>
<tr>
<td>1,2</td>
<td>Jhon</td>
<td>Doe</td>
</tr>
<tr>
<td>3</td>
<td>Mike</td>
<td>Poet</td>
</tr>
<tr>
<td>2,3</td>
<td>Ace</td>
<td>Ventura</td>
</tr>
</tbody>
</table>
&#13;
答案 1 :(得分:1)
尝试使用以下代码
$("#mySelector").on("change",
function(){
var a = $(this).find("option:selected").html();
$("table tr td:first-child").each(
function(){
if($(this).html() != a){
$(this).parent().hide();
}
else{
$(this).parent().show();
}
});
});
答案 2 :(得分:1)
这是一个可以测试here
的解决方案partners
答案 3 :(得分:1)
使用:contains()
选择器的简短解决方案:
$(document).ready(function($) {
$('table').hide();
$('#mySelector').change( function(){
var selection = $(this).val();
$('table')[selection? 'show' : 'hide']();
if (selection) { // iterate only if `selection` is not empty
$.each($('#myTable tbody tr'), function(index, item) {
$(item)[$(item).is(':contains('+ selection +')')? 'show' : 'hide']();
});
}
});
});