Как правильно заметил Стивен Сюй, вставка HTML-строк быстрее, чем манипулирование DOM, поэтому я рекомендую создавать элементы с манипулированием строками вместо jQuery.
Вам нужно только изменить это:
var s = "<a title=\"Blah\" href=\"javascript:BlahFunc('" + options.rowId +
"')\">This is blah<a>";
к этому:
var s = "<a title=\"Blah\" href=\"javascript:BlahFunc('" + options.rowId +
"')\">This is blah</a>";
(закрыть <a>
тег с </a>
в конце строки).
Работа со строками выполняется намного быстрее, чемDOM Manipulation (см., Например, this ).Более того, разница будет намного больше, если вы попытаетесь вставить фрагмент DOM в середине большого HTML-кода.Использование DOM DocumentFragments может немного улучшить производительность, но использование конкатенации строк - самый быстрый способ.
Все остальные ответы написали свой ответ без знания контекста (jqGridпользовательский форматер), где вы его используете.Я пытаюсь объяснить, почему это важно в вашем случае.
Из-за преимуществ в производительности jqGrid строит фрагменты HTML-кода для сетки сначала как массив строк, а затем строит одну строку из массива строк относительно .join('')
и вставьте результат в тело таблицы только в конце всего.(Я предполагаю, что вы используете gridview: true jqGrid, который почти всегда рекомендуется).Пользовательский форматер jqGrid - это функция обратного вызова, используемая jqGrid при построении тела таблицы (таблицы).Пользовательский форматировщик должен возвращать фрагмент кода HTML в виде строки в качестве результата.Строка будет объединена с другими строками, которые строят тело сетки (таблица).
Так что если вы измените свой текущий код с манипулирования чистой строкой на манипулирование DOM jQuery и преобразование результатов в строку (который необходимо вернуть как результат пользовательского форматирования), тогда ваш код будет работать медленно, и у вас не будет других преимуществ *.
Единственный реальный недостаток использования строковых манипуляций - это проблема проверкикода, который вы строите.Например, использование кода без закрывающих тегов </a>
является потенциальной проблемой, которая может возникнуть.В большинстве случаев проблема будет решена во время вставки фрагмента DOM, но иногда вы можете получить реальные проблемы.Поэтому вам нужно просто очень тщательно протестировать код, который вы вставили.
Еще одно замечание: если вы хотите следовать ненавязчивому стилю JavaScript , вы можете использовать "#" в качестве значения для href
атрибут и связать соответствующее click
событие внутри обработчика событий gridComplete
или loadComplete
.Если у вас возникнут проблемы с реализацией этого, вы можете открыть новый вопрос, и я постараюсь написать соответствующий пример кода для вас.
Примечание: я думаю, что лучшим способом реализации будет использование onCellSelect
или beforeSelectRow
вместо привязки события click
к каждому элементу <a>
в столбце.Я рекомендую прочитать следующие ответы для деталей: этот , другой и еще один старый ответ .