我正在尝试比较两个相等的字符串:textarea
值(或textContent
或innerHTML
)以及在Backbone模型中存储为属性的字符串,例如"A string↵with line break"
。
这种比较总是返回false
比较这些字符串的长度会显示差异(存储的字符串长一个符号)。
问题是如何准备第一个字符串(从textarea
中提取)以使其完全等于第二个字符串(存储在模型中)。
P.S。它们都是typeof === 'string'
。
P.P.S。 主要问题是如何在设置属性时让Backbone看到相等:
this.model.set({ attr: textareaValue })
。
Backbone使用Underscore的方法,在这种情况下简单地比较两个字符串:
return '' + a === '' + b;
我在两个字符串上都应用了encodeURIComponent
:结果是Some%0Atext
vs Some%0D%0Atext
。所以第二个字符有\r
个字符(由Handlebars呈现)。我应该在每个\n
之前插入此字符吗?
P.P.P.S。是的,这就是诀窍:textarea.value.replace(/\n/gm, '\r\n');
答案 0 :(得分:3)
我的第一个想法是从两个字符串中删除所有非字母字符并在之后进行比较。
str.replace(/[^a-zA-Z]/g, "");
答案 1 :(得分:2)
问题出现在\r
字符中:Handlebars呈现的textarea值为Some\ntext
,而存储在模型中的字符串为Some\r\ntext
)。
这就是诀窍:textarea.value.replace(/\n/gm, '\r\n');