jQuery从准备好的html表中动态选择数据

时间:2014-01-30 18:07:33

标签: javascript jquery html

我对来自html表的动态选择数据有一些问题。 我给出了表和输入的示例,但实际上该表包含数百行。

enter image description here

<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">

enter image description here

<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 列中的所有值 如果我选择相等,不相等,或多或少并按下我的数字,有人可以告诉我如何从表中显示/隐藏行??

1 个答案:

答案 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();

});

http://jsfiddle.net/q2PVm/1/