Opened 3 years ago
Closed 2 weeks ago
#1064 closed улучшение (готово)
Использовать методы .text() / .val() вместо escapeHtml()
| Reported by: | alx | Owned by: | Denis_N |
|---|---|---|---|
| Priority: | minor | Component: | БД изделий АДС |
| Keywords: | Cc: |
Description
В r133/base в файл script.js добавлена функция escapeHtml(), заменяющая определенные символы текста в HTML entities, которая потом используется для добавления произвольных строк текста в HTML-код.
Данный подход не очень хорош, так как, во-первых, требует чтобы каждый раз, когда к коду HTML добавляется произвольный текст, вызывать для него escapeHtml(), а во-вторых, само нагромождение таких вызовов затрудняет чтение кода (строка получается очень длинной, и в ней перемешаны и разметка HTML, и отображаемый текст, и вызовы функций)...
Предлагаю по возможности использовать немного другой подход: сначала создавать элемент документа, содержащий только структуру (разметку) без контента, а потом добавлять в его дочерние элементы контент методами text()/val()/prop(). Например вместо такого:
let div = $('<div class="InputField"><label>' + escapeHtml(labelText) + '</label><input type="text" name="recipient" class="recipient" maxlength="25" value="' + escapeHtml(recipient) + '"></div>');
писать так:
let div = $('<div class="InputField"><label/><input type="text" name="recipient" class="recipient" maxlength="25"></div>'); div.find('label').text(labelText); div.find('input').val(recipient);
Как нетрудно заметить, во втором варианте и структура создаваемого элемента лучше видна (ничего лишнего не мешает), и ясно видно, какие элементы какой текст получают, не требуется предварительное кодирование текста в HTML (не нужна "лишняя" доморощенная функция для кодирования).
Этот тикет - просто как замечание-рекомендация к коммиту (к сожалению в trac нельзя добавить комментарий к коммиту, как, например, это можно сделать в github, поэтому пришлось создать тикет). Можно закрыть по прочтении... :)
Change History (10)
comment:1 by , 3 weeks ago
comment:2 by , 3 weeks ago
В r605/base была удалена не используюема на текущий момент функция escapeHtml() из script.js.
А в других файлах есть свои отдельные функции с таким же именем:
js/main.js
js/universal_panel.js
js/orders.js
js/admin_panel.js
js/newscan.js
comment:10 by , 2 weeks ago
| Resolution: | → готово |
|---|---|
| Status: | new → closed |
Выполнена переработка по замечанию: в рабочих JS-файлах проекта ручное экранирование через escapeHtml() заменено на создание DOM-элементов и заполнение данных через .text(), .val(), .attr().
Проверены и обновлены script.js, main.js, universal_panel.js, orders.js, admin_panel.js, newscan.js. Функции escapeHtml()/HTML_ENTITIES удалены, в этих файлах не осталось .html(), innerHTML и строковых HTML-вставок через append/prepend/before/after.
Закрываю как "Готово"
![[MC-04 logo]](/mc-04/chrome/site/logo.png)
Спасибо, Алексей. Замечание рекомендация принята. Попробую текущие файлы, где используется подправить