Прокрутите таблицу DataTables, чтобы получить содержимое всех ячеек
Я использую jquery dataTables, чтобы создать разбитую таблицу на моем сайте. Мне нужно запустить процесс, который захватывает все данные из определенного столбца. Что-то вроде:
$('.testLink').click(function(){
var cells = new Array();
$('#myTable tr td').each(function(){
cells.push($(this).html());
});
console.log(cells);
});
Этот пример захватывает все, но мне нужна только информация из одного столбца tds. Думаю, я мог бы сделать это, добавив класс во все tds в этой строке, но я уверен, что есть лучший способ. Это вопрос бонуса.
но я действительно хочу знать, как заставить это работать с datatables? Поскольку script скрывает большую часть таблицы для разбивки на страницы, эта функция захватывает только видимые ячейки. Я играл с fnGetData
, но я не понимаю. Любые идеи?
Ответы
Ответ 1
Чтобы получить доступ ко всем строкам, вы можете:
var rows = $("#myTable").dataTable().fnGetNodes();
В вашем случае это должно работать:
$('.testLink').click(function(){
var cells = [];
var rows = $("#myTable").dataTable().fnGetNodes();
for(var i=0;i<rows.length;i++)
{
// Get HTML of 3rd column (for example)
cells.push($(rows[i]).find("td:eq(2)").html());
}
console.log(cells);
});
Ответ 2
Здесь используется метод fnGetData()
Сначала получите данные из плагина, которые будут видимыми во всех рядах. Петля по каждому массиву данных строки и нажмите index = 1 (вторая ячейка) в новый массив
oTable = $('#example').dataTable();
var secondCellArray=[];
$.each( oTable.fnGetData(), function(i, row){
secondCellArray.push( row[1]);
})
console.log( secondCellArray)
EDit: рабочая демонстрация... посмотрите в консоли после рендера
http://live.datatables.net/apixiv/edit#javascript,html
Ответ 3
jQuery.map
в сочетании с fnGetData()
делает для компактного решения. Следующая функция вернет одномерный массив, содержащий все значения из obj_dtable
n
th column:
function getDataTableColumn(obj_dtable,n) {
return $.map(obj_dtable.fnGetData(), function(val) {
return val[n];
});
};
Ответ 4
Вы хотите использовать селектор "EQ". Он начинается с индекса "0", поэтому, если у вас есть..
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
Затем, используя
$("td").eq(3); // last one
$("td").eq(2); //returns "2"
Имеют смысл?
http://api.jquery.com/eq-selector/