2010-08-11 68 views
1

我試圖以智能的方式過濾表格行(而不是僅僅是最終完成工作的大量代碼),而是一種相當枯燥的靈感。jQuery Table按列過濾

我有5列在我的表中。在每個頂部有一個下拉或文本框用戶可以過濾表數據(基本上隱藏不適用的行)

有很多jQuery的表過濾插件,但沒有工作完全像這樣,那就是複雜的部分:|

回答

8

這是一個基本的過濾器例如http://jsfiddle.net/urf6P/3/

它使用jQuery選擇:包含(「一些文本」)和:不是(:contains('some text'))來決定每行應該被顯示還是隱藏。這可能會讓你朝着一個方向前進。

編輯,以包括來自的jsfiddle的HTML和JavaScript:

$(function() {  
    $('#filter1').change(function() { 
     $("#table td.col1:contains('" + $(this).val() + "')").parent().show(); 
     $("#table td.col1:not(:contains('" + $(this).val() + "'))").parent().hide(); 
    }); 

}); 
+0

這是一個相當有效的方式,但最好的是,這麼少的代碼:P謝謝 – Jimbo 2010-08-13 06:07:34

+0

http://jsfiddle.net/urf6P/1073/...不工作對我來說 – Si8 2017-10-27 13:37:24

+0

非常好的解決方案! – Alphacoder 2018-01-25 16:28:38

1

這可能不是最好的方法,但我不確定性能,但一個選項是標記每列(在每一行中)帶有以列標識符開頭的標識符,然後是唯一號碼就像記錄標識符一樣。

舉例來說,如果你有一列產品名,以及創紀錄的ID是763,我會做類似如下:

​​<table id="table1"> 
    <thead> 
     <tr> 
      <th>Artist</th> 
      <th>Album</th> 
      <th>Genre</th> 
      <th>Price</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td id="artist-127">Red Hot Chili Peppers</td> 
      <td id="album-195">Californication</td> 
      <td id="genre-1">Rock</td> 
      <td id="price-195">$8.99</td> 
     </tr> 
     <tr> 
      <td id="artist-59">Santana</td> 
      <td id="album-198">Santana Live</td> 
      <td id="genre-1">Rock</td> 
      <td id="price-198">$8.99</td> 
     </tr> 
     <tr> 
      <td id="artist-120">Pink Floyd</td> 
      <td id="album-183">Dark Side Of The Moon</td> 
      <td id="genre-1">Rock</td> 
      <td id="price-183">$8.99</td> 
     </tr> 
    </tbody> 
</table> 

然後,您可以使用jQuery過濾器的基礎上的開始id

例如,如果您希望通過藝術家列過濾:

var regex = /Hot/; 
$('#table1').find('tbody').find('[id^=artist]').each(function() { 
    if (!regex.test(this.innerHTML)) { 
     this.parentNode.style.backgroundColor = '#ff0000'; 
    } 
}); 
+0

+1感謝您的輸入:) – Jimbo 2010-08-13 06:06:35

+0

而不是僅僅通過ID,如果我想搜索每一行中的每一列,該怎麼辦? – Si8 2017-10-27 16:53:03

+0

http://jsfiddle.net/qppz7vp6/ – Si8 2017-10-27 17:06:38

0

步驟:1寫入HTML文件

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.."> 

<table id="myTable"> 
    <tr class="header"> 
    <th style="width:60%;">Name</th> 
    <th style="width:40%;">Country</th> 
    </tr> 
    <tr> 
    <td>Alfreds Futterkiste</td> 
    <td>Germany</td> 
    </tr> 
    <tr> 
    <td>Berglunds snabbkop</td> 
    <td>Sweden</td> 
    </tr> 
    <tr> 
    <td>Island Trading</td> 
    <td>UK</td> 
    </tr> 
    <tr> 
    <td>Koniglich Essen</td> 
    <td>Germany</td> 
    </tr> 
</table> 

步驟如下:2寫在以下.js文件

function myFunction() { 
    // Declare variables 
    var input, filter, table, tr, td, i; 
    input = document.getElementById("myInput"); 
    filter = input.value.toUpperCase(); 
    table = document.getElementById("myTable"); 
    tr = table.getElementsByTagName("tr"); 

    // Loop through all table rows, and hide those who don't match the search query 
    for (i = 0; i < tr.length; i++) { 
    td = tr[i].getElementsByTagName("td")[0]; 
    if (td) { 
     if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { 
     tr[i].style.display = ""; 
     } else { 
     tr[i].style.display = "none"; 
     } 
    } 
    } 
}