JQuery DataTables: как фильтровать строки DOM, при нажатии флажков? - PullRequest
2 голосов
/ 08 ноября 2011

Я подготовил простой тестовый пример для моего вопроса.

Просто сохраните его на диск и откройте в браузере - он будет работать мгновенно, вам не нужно ничего скачивать или устанавливать.

Вот скриншот для моего теста:

screenshot

Мой вопрос: как я могу отфильтровать строки в таблице, когда пользователь выбирает фрукты и / или конфеты? Какую функцию вызывать здесь, fnDraw ()?

Мой тестовый файл index.html :

<html>
<head>
<style type="text/css" title="currentStyle">
        @import "http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.0/themes/redmond/jquery-ui.css";
</style>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://raw.github.com/DataTables/DataTables/master/media/js/jquery.dataTables.js"></script>
<script type="text/javascript">

$(function() { 
        var my_table = $('#my_table').dataTable( {
            bJQueryUI: true,
            aoColumns: [
                /* type */ { bVisible: false, bSearchable: false },
                /* thing */ null
            ]
        });

        $(':checkbox').click(function() {
            alert('XXX what to do here? XXX');
        });
});

</script>
</head>
<body>

<p>What should be shown:</p>
<p><label><input type="checkbox" value="fruit">fruit</label></p>
<p><label><input type="checkbox" value="candy">candy</label></p>

<table id="my_table">
<thead>
<tr>
<th>Type</th>
<th>Thing</th>
</tr>
</thead>
<tbody>
<tr><td>fruit</td><td>apple</td></tr>
<tr><td>fruit</td><td>banana</td></tr>
<tr><td>fruit</td><td>pear</td></tr>
<tr><td>candy</td><td>jelly</td></tr>
<tr><td>candy</td><td>toffee</td></tr>
<tr><td>candy</td><td>fudge</td></tr>
</tbody>
</table>
</body>
</html>

Спасибо за любые подсказки!

ОБНОВЛЕНИЕ: Я спросил на форуме DataTables тоже.

Ответы [ 2 ]

3 голосов
/ 12 ноября 2011

Вот мое собственное решение с использованием afnFiltering , оно работает хорошо.

Мне не понравилось решение fbas с использованием fnFilter , потому что это приводит к отображению строки поиска в поле поиска. (Но все равно спасибо за ваше предложение).

<html>
<head>
<style type="text/css" title="currentStyle">
        @import "http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css";
</style>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/jquery.dataTables.min.js"></script>
<script type="text/javascript">

$.fn.dataTableExt.afnFiltering.push(
        function(oSettings, aData, iDataIndex) {
                var isFruit = (aData[0] == 'fruit');
                return (isFruit ? $('#fruit').is(':checked') :
                                  $('#candy').is(':checked'));
        }
);

$(function() { 
        var my_table = $('#my_table').dataTable( {
                bJQueryUI: true,
                aoColumns: [
                        /* type */  { bVisible: false, 
                                      bSearchable: false },
                        /* thing */ null
                ],

        });

        $(':checkbox').click(function() {
                my_table.fnDraw();
        });
});

</script>
</head>
<body>

<p>What should be shown:</p>
<p><label><input type="checkbox" id="fruit">fruit</label></p>
<p><label><input type="checkbox" id="candy">candy</label></p>

<table id="my_table">
<thead>
<tr>
<th>Type</th>
<th>Thing</th>
</tr>
</thead>
<tbody>
<tr><td>fruit</td><td>apple</td></tr>
<tr><td>fruit</td><td>banana</td></tr>
<tr><td>fruit</td><td>pear</td></tr>
<tr><td>candy</td><td>jelly</td></tr>
<tr><td>candy</td><td>toffee</td></tr>
<tr><td>candy</td><td>fudge</td></tr>
</tbody>
</table>
</body>
</html>
0 голосов
/ 09 ноября 2011

добавить обработчик для ваших флажков (при изменении), который выполняет итерацию по флажкам, создать строку поиска (с регулярными выражениями), которую вы передадите в fnFilter для столбца 'type'

т.е. если флажок "fruit" установлен, fnFilter получит "^ fruit $"

т.е. если флажок "candy" установлен, fnFilter получит "^ candy $"

т.е. если оба проверены, fnFilter получит «^ candy $ | ^ fruit $»

вызовет fnFilter со строкой поиска для этого столбца, но также установит для 3-го параметра значение true для фильтрации регулярных выражений

http://www.datatables.net/ref#fnFilter

...