#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.