【发布时间】:2014-03-23 17:50:39
【问题描述】:
有一个包含两列(Source 和 Type)的 HTML 表。要过滤数据,有两个单选按钮。我能够过滤每个单选按钮的数据,但我正在努力结合两个单选按钮过滤功能。
HTML 代码
<form action="" id="Details">
<fieldset>
<label><input type="radio" name="Option1" value="Critical" >Critical</label>
<label><input type="radio" name="Option1" value="Non Critical" >Non Critical</label>
<label><input type="radio" name="Option1" value="A" checked="checked" >All</label>
<br>
<br>
<label><input type="radio" name="Option2" value="Internal" >Internal</label>
<label><input type="radio" name="Option2" value="External" >External</label>
<label><input type="radio" name="Option2" value="A" checked="checked" >All</label>
</fieldset>
</form>
<br>
<br>
<div>
<table id="DataTable" border="1">
<tr>
<th>Source</th>
<th>Type</th>
</tr>
<tr>
<td class="Source">Internal</td>
<td class="Type">Critical</td>
</tr>
<tr>
<td class="Source">Internal</td>
<td class="Type">Non Critical</td>
</tr>
<tr>
<td class="Source">External</td>
<td class="Type">Critical</td>
</tr>
<tr>
<td class="Source">External</td>
<td class="Type">Non Critical</td>
</tr>
</table>
</div>
<button id='btnFilter'>Go</button>
脚本
$('#btnFilter').click(function() {
var val1 = $('[name=Option1]:checked').val();
var val2 = $('[name=Option2]:checked').val();
$('tr').hide();
$('tr td.Source').each(function() {
if ($(this).text() == val2 )
{
$(this).parent().show();
}
});
alert("ok");
$('tr').hide();
$('tr td.Type').each(function() {
if ($(this).text() == val1 )
{
$(this).parent().show();
}
});
});
预期行为 用户将选择两个单选按钮值(如果未选择,则将考虑默认值),然后应过滤 HTML 表,同时考虑选择的值。如果用户更改一个单选按钮的值,则应相应地过滤 HTML 表。 在我的代码中,每个过滤器逻辑都可以正常工作,但我无法结合这两种逻辑,即如果为第二个单选按钮应用过滤器,那么它应该获取由第一个单选按钮过滤的数据并在其之上应用显示/隐藏但是当我这样做时,它会考虑整个数据。
目前的逻辑是Fiddle
此外,当用户从任何单选按钮中选择全部时,这意味着所有数据都应被视为该单选按钮。如果两者都被选中,则整个 HTML 表格数据。
【问题讨论】:
标签: javascript jquery filter