我对来自html表的动态选择数据有一些问题。 我给出了表和输入的示例,但实际上该表包含数百行。
<select name="options">
<option value="equal">=</option>
<option value="notequal">!=</option>
<option value="more">></option>
<option value="less"><</option>
</select>
<input type="input" value="input numbers" id="filter">
<table border="1">
<tr>
<td width="150">NAME</td>
<td class="wys">Value</td>
<td>Value2</td>
<td>Value3</td>
</tr>
<tr>
<td width="150">Name1</td>
<td class="wys">65</td>
<td>87</td>
<td>988</td>
</tr>...
所以,问题是如何根据输入数据和所选选项隐藏/显示行,假设输入数据引用列值
我的第一个解决方案是:
$("#filter").keyup(function() {
var filter = $("#filter").val();
var options = $("#options").val();
if(options == 'equal'){
$("table td.wys:contains('" + $(this).val() + "')").parent().show();
$("table td.wys:not(:contains('" + $(this).val() + "'))").parent().hide();
}
else if(options == 'notequal'){
$("table td.wys:contains('" + $(this).val() + "')").parent().hide();
$("table td.wys:not(:contains('" + $(this).val() + "'))").parent().show();
}
else if(options == 'more'){
//HOW TO SHOW/HIDE ROW GREATER THAN eg. 100
}
else {
//HOW TO SHOW/HIDE ROW SMALLER THAN eg. 100
}
});
所以我找到了第二个解决方案......
var wys = $("table td.wys");
wys.each(function() {
$(this).attr('data-wys', parseInt($(this).text()));
});
我设置属性并解析为 VALUE 列中的所有值 如果我选择相等,不相等,或多或少并按下我的数字,有人可以告诉我如何从表中显示/隐藏行??
答案 0 :(得分:1)
您可以使用.filter()
方法:
// A helper object for doing some math
var operators = {
'equal': function(a, b) { return a == b },
'notequal': function(a, b) { return a != b },
'more': function(a, b) { return a > b },
'less': function(a, b) { return a < b }
};
var $tr = $('tr').not(':first'),
$sel = $("select[name='options']").on('change', function() {
// Trigger the keyup on the select's change event
$("#filter").keyup();
});
$("#filter").keyup(function () {
var v = $.trim(this.value),
o = $sel.val();
// Show all the TRs when the value's length is 0
if (!v.length) return $tr.show();
$tr.hide().filter(function () {
var t = $('.wys', this).text();
return operators[o](t, v);
}).show();
});