2016-11-21 7 views
2

Мое предупреждение работает, но я не знаю, как использовать rowData для фильтрации других экземпляров datatables. Вот мой codepen: http://codepen.io/smuglovsky/pen/YpNjXm?editors=1010Datatables получает данные о строках, а затем делает fn.dataTable.ext.search.push

Я узнал, как «нажмите на каждой строке и получить данные» здесь: https://datatables.net/release-datatables/examples/advanced_init/events_live.html

Я также нашел, как «получить данные из строки, которая была нажата на» здесь: https://datatables.net/reference/type/row-selector

Я знаю, что я почти там, но я застрял на линии 460 моего codepen:

$('#example-sections tbody').on('click', 'tr', function() { 
    var data = table_sections.row(this).data(); 
    var rowData = table_sections.row(this).data(); 
    // ... do something with rowData 
    alert('You clicked on ' + data[0] + '\'s row'); 
    $.fn.dataTable.ext.search.push(
     function(settings, data, rows, dataIndex, rowIndex, rowData) { 
     // I want to filter the rowData, just like the alert is doing 
     return data[0] == +data[0] ? true : false; 
     } 
    ); 
    table_main.draw(); 
    table_books.draw(); 
    $.fn.dataTable.ext.search.pop(); 
    }); 

ответ

1

Таким образом, используя «$ .fn.dataTable.ext.search» добавляет пользовательскую функцию поиска для ВСЕХ данных ta . Я думаю, что вы хотите здесь отфильтровать другие экземпляры DataTable, используя значение из щелчка определенной сетки. Если это так, вы бы хотели подойти к этой проблеме немного по-другому.

Следующее решение предполагает, что первый столбец сетки «пример-сечения» соответствует столбцу, который вы хотите найти в столбцах «table_main» и «table_books». Если это так, вы можете просто получить столбец «table_main» и «table_books» с помощью индекса и применить к нему поиск, используя данные из строки, на которую вы нажали.

$('#example-sections tbody').on('click', 'tr', function() { 
    var rowData = table_sections.row(this).data(); 
    // ... do something with rowData 
    alert('You clicked on ' + rowData[0] + '\'s row'); 

    // Lets build a regular expression that will give only exact matches. 
    var searchRegExp = new RegExp("^" + rowData[0] + "$"); 

    // Ok so we are going to use a regex. Second param is to turn on 
    // search by a regular expression. The third param is to turn off "smart" 
    // searching which would conflict. The last param is to turn off case 
    // insensitive matching. 
    table_main.column(0).search(searchRegExp, true, false, false).draw(); 
    table_books.column(0).search(searchRegExp, true, false, false).draw(); 
}); 

ПРИМЕЧАНИЕ: Для «table_main.column (0)» «0» является индекс столбца в наборе данных, так что если у вас есть скрытые столбцы эти счета к этому индексу. Например, допустим, что мой первый видимый столбец является столбцом «ID», но у меня есть два скрытых столбца, которые определены в моем определении «столбцы» перед столбцом «ID», тогда индекс столбца «ID» будет «2», а не "0".

РЕДАКТИРОВАТЬ: изменить поиск, чтобы возвращать точное соответствие. Артикул: https://datatables.net/reference/api/search()

+0

Большое спасибо Aliester! Он работает очень хорошо. У меня вопрос: он фильтрует все красные 1, но я получаю также красные 1, такие как 11, 12, 21 и т. Д. Мне нужно «точное совпадение». Я добавил символы подчеркивания «_1_». Я попробовал «<1>», но, видимо, эти данные не нравятся. В настоящее время мой код не работает, потому что http://crossorigin.me/ не работает. Я пробовал скрипку, plunkr и jsbin без успеха. Может думать о другом корсе? :) В то же время, пожалуйста, посмотрите здесь: http://solidarityfarm.tk/AdminLTE-master/pages/layout/_______o_tE_029.html Снова, спасибо большое, приятель! –

+0

@ user2792945 Я думаю, что по умолчанию он использует поиск типа «LIKE» вместо точного соответствия. Позвольте мне посмотреть, смогу ли я это понять. – Adrian

+0

@ user2792945 Попробуйте обновленный код выше. Я думаю, что это будет тренировка. – Adrian

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