Я пытаюсь сравнить две равные строки: значение textarea
(или textContent
, или innerHTML
) и строку, сохраненную в качестве атрибута в модели Backbone. "A string↵with line break"
. И это сравнение всегда возвращает false
.
Сравнивая длину этих строк, вы обнаружите разницу (сохраненный один символ длиннее). Вопрос заключается в том, как подготовить первую строку (извлеченную из textarea
), чтобы она была полностью равна второй (сохраненной в модели).JS сравнение строк с разрывами строк
P.S. Они оба - typeof === 'string'
.
P.P.S. Основная проблема заключается в том, как сделать опорную планку равной равным при установке атрибута:
this.model.set({ attr: textareaValue })
.
Backbone использует метод Underscore, который просто сравнивает две строки в этом случае:
return '' + a === '' + b;
Я применил encodeURIComponent
на обеих строках: результат Some%0Atext
против Some%0D%0Atext
. Итак, у второго есть символ \r
(он отображается ручками). Должен ли я вставлять этот символ перед каждым \n
?
P.P.P.S. Да, это сделал трюк: textarea.value.replace(/\n/gm, '\r\n');
Заменить на '/ \ г \ п/G', так что вы не до конца с '\ г \ г \ n', если строка действительно имеет символ' \ r' –