jqGrid-вставить Пользовательский HTML в ячейку

Я пытаюсь преобразовать простую старую таблицу html в jqGrid. В старой таблице есть столбец, содержащий теги, которые построены с использованием неупорядоченного списка и элементов списка.

вот пример (jsfiddle) таблицы до и после jqGrid.

в этом примере я использую пользовательский модуль форматирования использует Шаблоны jQuery для построения элементов DOM, а затем форматер возвращает $.html () из результирующего элемент DOM.

function getTagCellContents(cellvalue) {
    var domitems=$("#jqgrid-tag-list-item").tmpl({tags: callvalue});
    return domitems.html();
}

проблема, с которой я столкнулся, заключается в том, что пробелы, включенные в результирующий html, вызывают слишком высокие строки. Это также приводит к неудобным атрибутам "Title" на ячейках.

предоставляет ли jqGrid API для вставки объектов DOM непосредственно в ячейку, а не путем возврата текста из пользовательского форматера? Какова наилучшая практика размещения настраиваемого html в ячейку jqGrid?

1 ответов


Я нахожу ваш вопрос очень интересным и поэтому +1 от меня за вопрос.

основная проблема понимания с использованием пользовательского форматирования: требуется, чтобы ваша функция обратного вызова возвращала фрагмент HTML в строке. Преимущество этого-хорошая производительность,которую можно увидеть в основном на большой сетке. Если вы работаете с элементами DOM и используете такие конструкции, как domitems.html() у вас будет не очень хорошее представление.

поэтому, прежде всего, я бы рекомендовал вам использовать $.template функция шаблонов jQuery. Это позволяет работать со строками без использования DOM. ответ например описывает основную идею модификации вашего кода.

чтобы исправить вашу основную проблему, я предлагаю просто удалить \n и withespaces из строки. Я не профессионал RegEx, поэтому предлагаю следующее быстрое и грязное решение:

// Create and cache a named template function
$("#jqgrid-tag-list-item").template("cellContents");
var tmpl = $.template("cellContents"); // template function

function getTagCellContents(a) {
    var strings = tmpl($, {data: {tags: a}}); // array of strings
    return strings.join('')
               .replace(/\n+/g,'')
               .replace(/\s+/g,' ')
               .replace(/> </g,'><');
}

ваша демонстрация jsfiddle будет следующее после такой модификации.