2013-11-14 4 views
2

Я установил базовую таблицу из примера в SO here, где я добавил заголовки столбцов.HTML-таблица фильтра с колонками

Может кто-нибудь сделать предложение, как исправить фильтр таблицы, чтобы он не скрывал заголовки столбцов? Вот код jsfiddle, который я тестировал.

Javascript

var $rows = $('#table tr'); 
$('#search').keyup(function() { 

var val = '^(?=.*\\b' + $.trim($(this).val()).split(/\s+/).join('\\b)(?=.*\\b') + ').*$', 
    reg = RegExp(val, 'i'), 
    text; 

$rows.show().filter(function() { 
    text = $(this).text().replace(/\s+/g, ' '); 
    return !reg.test(text); 
}).hide(); 
}); 

Пример поиск: Если вы наберете яблоко в поиске - это скрывает название 1 и название 2. Тем не менее, я предпочитаю, чтобы сохранить титул 1 и 2 титула после того, как поиск был введен.

ответ

3

Моя рекомендация: добавить класс в свой заголовок, и исключает, что из результатов фильтра:

http://jsfiddle.net/7BUmG/1161/

<input type="text" id="search" placeholder="Type to search"> 
<table id="table"> 
    <tr class="header"> 
     <th>Title 1</th> 
     <th>Title 2</th> 
    </tr>  
    <tr> 
     <td>Apple</td> 
     <td>Green</td> 
    </tr> 
    <tr> 
     <td>Grapes</td> 
     <td>Green</td> 
    </tr> 
    <tr> 
     <td>Orange</td> 
     <td>Orange</td> 
    </tr> 
</table> 

    var $rows = $('#table tr[class!="header"]'); 
    $('#search').keyup(function() { 

     var val = '^(?=.*\\b' + $.trim($(this).val()).split(/\s+/).join('\\b)(?=.*\\b') + ').*$', 
      reg = RegExp(val, 'i'), 
      text; 

     $rows.show().filter(function() { 
      text = $(this).text().replace(/\s+/g, ' '); 
      return !reg.test(text); 
     }).hide(); 
    }); 
+1

Howard, в то время как ваше решение будет работать, нет необходимости добавлять пользовательский класс, а затем сбрасывать его в селекторе, когда у вас есть определенные теги (thead, tbody и tfoot) в html для этой цели. – Babblo

+0

Благодарим вас за решение. Я не знал, что могу добавлять классы в теги и выбирать их. – JnL

1

Использование var $rows = $('#table tbody tr');

+2

Проблема заключается в том, как вы фильтрации .. Вам Строка «title» на самом деле является другой «стандартной» строкой в ​​таблице. Программа не знает, что для вас является заголовком, поэтому существуют теги '' и '', чтобы сообщить программе, что для вас является головой и телом таблицы. Итак, вы должны добавить теги '', а затем использовать селектор jQuery в качестве указателя jameslafferty. – Babblo

+0

Тёмный тег автоматически вводится через таинственный интеллект DOM (ухмылка). Однако объяснение @Babblo объясняет, почему ответ работает намного яснее. – jameslafferty

+0

Благодарим за решение. Это ясное объяснение, и я проверил объяснение. Кроме того, я тестировал с и без тегов, и они оба фильтруют, как ожидалось. Поскольку я все еще участвую, я включил теги для удобочитаемости. – JnL

Смежные вопросы