2013-11-28 94 views
2

我試圖建立使用jQuery的HTML表中選擇過濾器,我想只過濾該表的第一列,到目前爲止,我已經有了這個功能:過濾第一列Jquery的

$('#select').change(function() { 
    var rows = $("#tablebody_hosts").find("tr").hide(); 
    var data = this.value.split(" "); 
    $.each(data, function(i, v) { 
     rows.filter(":contains(" + v + ")").show(); 
    }) 
}); 

我怎樣才能使這只是搜索表中的第一列的數據?

回答

3

試試這個:

rows.filter(function() { 
    return $(this).children(':eq(0)').text().indexOf(v) !== -1; 
}).show(); 

相反的:

rows.filter(":contains(" + v + ")").show(); 

Doc:http://api.jquery.com/eq-selector/

+0

感謝您的答案,只是想知道我如何可以匹配v的值,例如,如果v是3,那麼將包括13或23。無論如何要完全匹配3? –

+0

@PedroOliveira我明顯被':contains()'選擇器誤導了。這個解決方案是否符合你的要求(嚴格相等):'$ .trim($(this).children(':eq(0)')。text())=== v'? – leaf

+0

感謝您的線索!它現在工作正常! –

0
$.each(data, function(i, v) { 
    rows.filter(function(){ 
    return (data.indexOf($.trim($(this).children('td').first().text())) != -1); 
}).show(); 
}); 
+1

您顯示的是單元格而不是行。 – leaf

+1

你應該說:爲什麼upvote upvoters:D – leaf

0

你並不需要通過行迭代,就試試這個,

rows.filter(function(){ 
    return (data.indexOf($.trim($(this).children('td').first().text())) != -1); 
}).show(); 

或者

rows.filter(function(){ 
    return $.inArray($.trim($(this).children('td').first().text()),data); 
}).show(); 
+0

@Downvoter謹慎解釋你的投票。 –

+0

當然。您顯示的是單元格而不是行,此外,如果給定元素不存在,則'indexOf'返回-1。 – leaf

+0

@wared感謝您指出錯誤,我還是錯過了什麼。 –