Доступ к API таблиц данных с использованием идентификатора таблицы

#jquery #datatable #tabs #jquery-selectors

#jquery #datatable #вкладки #jquery-селекторы

Вопрос:

Я использую вкладки пользовательского интерфейса jQuery. У меня есть DataTable на каждой новой вкладке. Я хочу добавить строки, которые были выбраны в диалоговом окне, в таблицу на текущей вкладке.
Потому что у меня есть таблицы внутри вкладок, названные с тем же номером, который я использовал для вкладок (например, «tabs-1» будет содержать таблицу «choice1») Я бы предпочел находить нужную таблицу каждый раз, когда мне нужно добавлять строки, чем хранить все эти табличные переменные в коллекции.
Если вы точно и определенно знаете, что доступ к уже инициализированным таблицам данных, когда они были инициализированы, без сохранения в переменной невозможен, пожалуйста, предложите метод хранения, потому что единственное, что приходит мне на ум, — это объект, где ключами являются строки, содержащие названия вкладок, а значениями — переменные таблицы. И я не уверен, что это лучший способ.
Вот что я уже пробовал:

 var id = '#choice'   $("#tabs ul>li a").eq(tabs.tabs('option', 'active')).attr('href').slice(-1);
$(id).row.add( dialogTable.rows({ selected: true }).data() ).draw();
  

Итак, даже если я прокомментирую первую строку и жестко закодирую «#choice1», это все равно выдаст ошибку TypeError: $(...).row is undefined .

Ответ №1:

Вы должны вызывать .row() экземпляр API таблиц данных, а не объект jQuery table.

Вызов .DataTable() инициализирует datatable и возвращает экземпляр API. Если таблица уже инициализирована, она просто вернет экземпляр.

Из документов:

Доступ к API

Новый экземпляр API таблиц данных может быть получен для одной или нескольких таблиц одним из трех различных способов:

  • $(селектор ).DataTable();

  • $(селектор ).DataTable().api();

  • новый $.fn.DataTable.Api (селектор);

Результатом каждого из них является экземпляр объекта API DataTables, который содержит таблицы, найденные селектором в его контексте.

Это позволит получить нужную строку:

 $(id).DataTable().row()
  

Следовательно, это должно сработать:

 $(id).DataTable().row.add(dialogTable.rows({ selected: true}).data() ).draw();
  

Комментарии:

1. @mekkanizer вы уверены, что не dialogTable.rows бит вызывает эту ошибку? dialogTable также должен быть экземпляр API. Я бы поспорил, что это не

2. @mekkanizer Можете ли вы создать jsFiddle с вашим полным кодом, чтобы я мог более внимательно изучить таблицу?

3. Боже, прости мою глупость… все в порядке, просто пропустил () после таблиц данных…

4. Да, но с текущей версией DataTable этот код инициализирует таблицу во второй раз, а затем возвращает экземпляр api.