jqGrid - ячейки с элементами TD внутри - PullRequest
0 голосов
/ 07 декабря 2011

Кажется, у меня проблема с jQuery Grid (jqGrid), если я загрузил данные, где одна из ячеек имеет таблицу внутри, он выдает ошибку, когда onSelectRow() срабатывает и я вызываю $(grid).getRowData(rowid).

Кажется, что jqGrid перечисляет ВСЕ элементы TD в выбранной строке (включая те, которые являются дочерними элементами таблицы в данной ячейке).

Есть ли правильный способ сделать это или запретить jqGrid перечислять эти элементы? (

РЕДАКТИРОВАТЬ: В моем конкретном случае, HTML был скрыт до необходимости, поэтому я смог заменить TD на «xtd» на сервере, пока они не были отправлены клиенту. На стороне клиента, когда мне понадобился HTML, я просто заменял «xtd» на «td». Все еще хотелось бы, чтобы был лучший способ.

РЕДАКТИРОВАТЬ: Я хочу уточнить, я хочу метод, который не изменяет плагин. Хорошо написанная модификация все равно будет хороша.

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Старый, но еще не решен.

Привет. Да. У jqGrid есть проблема с внутренними table и td, но есть быстрое и полезное решение. В файле jquery.jqGrid.min (jqGrid 3.8.2 - jQuery Grid). Поместите файл в js-beutifier или получите не минимизированную версию и найдите функцию getRowData. Затем вы должны добавить дополнительное условие для поиска foreach b("td", r).each(function (t) { к коду b("td[id!='-1']", r).each(function (t) {. В вашей внутренней таблице вы должны объявить <td id="-1">. В этом случае вы исключаете свой тд из поиска в colModel.

Скопируйте / Вставьте этот код:

getRowData: function (f) {
            var j = {},
                i, c = false,
                e, k = 0;
            this.each(function () {
                var n = this,
                    a, r;
                if (typeof f == "undefined") {
                    c = true;
                    i = [];
                    e = n.rows.length
                } else {
                    r = n.rows.namedItem(f);
                    if (!r) return j;
                    e = 2
                }
                for (; k < e;) {
                    if (c) r = n.rows[k];
                    if (b(r).hasClass("jqgrow")) {
                        b("td[id!='-1']", r).each(function (t) {//fix
                            a = n.p.colModel[t].name;
                            if (a !== "cb" && a !== "subgrid" && a !== "rn") if (n.p.treeGrid === true && a == n.p.ExpandColumn) j[a] = b.jgrid.htmlDecode(b("span:first", this).html());
                            else try {
                                j[a] = b.unformat(this, {
                                    rowId: r.id,
                                    colModel: n.p.colModel[t]
                                }, t)
                            } catch (B) {
                                j[a] = b.jgrid.htmlDecode(b(this).html())
                            }
                        });
                        if (c) {
                            i.push(j);
                            j = {}
                        }
                    }
                    k++
                }
            });
            return i ? i : j
        }

Наконец, где вы хотите поместить внутреннюю таблицу, сделайте это:

<table>
    <tr>
        <td id="-1">
            Now It's working!
        </tr>
        <td id="-1">
            Yeah
        </tr>
    </tr>
</table>

Конечно, вы можете изменить атрибут id, но я рекомендую исправить это с атрибутом html id из-за производительности jQuery против атрибута class.

0 голосов
/ 01 июля 2014

Есть еще одна опция, которую я реализовал.Вместо того, чтобы манипулировать основным javascript jqGrid, почему бы не использовать th-теги вместо td-тегов в ячейке, в которой вы создаете таблицу.

У меня было похожее требование, и я продолжил реализацию, описанную выше (манипулирование jqgrid.min.js).Но затем происходит несоответствие между столбцом № и ячейкой, которые мы пытаемся получить.Например, я должен был установить ячейку динамически, хотя идентификатор столбца был верным, он редактировал / изменял другую ячейку (так как в одной из ячеек были дополнительные теги td).

Я использовал теги th вместо td для пользовательской таблицы, которую я создаю в ячейке.Работает до сих пор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...