#jquery #html #css #jqgrid
#jquery #HTML #css #jqgrid
Вопрос:
На моей работе у нас есть несколько очень старых таблиц с данными, и мы пытаемся преобразовать их в jqGrid. К сожалению, не все таблицы можно воссоздать с нуля в jqGrid, поэтому мы используем tableToGrid для преобразования таблиц с данными в jqGrid и имеем, по крайней мере, некоторые функциональные возможности, такие как сортировка и стили css. Но мы обнаружили проблему с одной из наших таблиц: эта таблица в некоторых случаях отображает информацию с использованием вложенной таблицы, и в этих случаях tableToGrid сворачивается, потому что он не может определить, что td внутренней таблицы не принадлежат внешней таблице, поэтому он добавил во внешнюю таблицу. Результат? Беспорядок. Итак, мой вопрос таков: принимая во внимание ограничения (например, нельзя использовать подсетку, потому что дата уже отображается в html), кто-нибудь из вас знает способ сообщить tableToGrid игнорировать «внутреннюю» таблицу? Я думаю, что ключевым моментом здесь является поиск способа вызова tableToGrid для внешней и внутренней таблиц без вмешательства одного вызова в другой.
С уважением
Ответ №1:
Поскольку вы сказали
способ указать tableToGrid игнорировать «внутреннюю» таблицу
похоже, вы не заинтересованы сохранять и использовать их содержимое (по крайней мере, во время операции преобразования).
Таким образом, вы могли бы просто вставить это перед операцией преобразования:
$('table table').remove();
Очевидно, вам, возможно, придется написать что-то более точное, чем table table
, в зависимости от всего контекста.
Ответ №2:
Основной причиной вашей проблемы является использование tableToGrid
, который является плагином к jqGrid, созданным много лет назад и почти не изменявшимся и не поддерживаемым. Например, плагин использует addRowData
в цикле (см. строку), который работает очень медленно. Источником проблемы, которую вы описываете, является строка кода
jQuery('td', jQuery(this)).each(function() {
которое можно было бы изменить на
jQuery(this).children('td').each(function() {
например, или просто
jQuery(this.cells).each(function() {
(смотрите здесь о cells
коллекции every <tr>
. Можно просто использовать this.cells[i]
для доступа innerHTML
к i-й ячейке строки)
Многие части кода tableToGrid
ориентированы на очень специфическую структуру сетки, в которой установлены флажки, что позволяет преобразовывать такие сетки в сетки с multiselect: true
опцией. Это то, что вам нужно?
Код tableToGrid
состоит из двух основных частей: первая считывает данные из существующей <table>
и сохраняет данные в массиве элементов. Вторая часть создает сетку, используя данные. Если вы знаете структуру ваших существующих таблиц, то вы можете очень легко создать замену tableToGrid
. Это то, что я рекомендую вам сделать.