2015-10-26 223 views
0

我試圖比較兩個相同的字符串:textarea值(或textContentinnerHTML)和一個字符串作爲屬性存儲在骨幹模型,例如, "A string↵with line break"。 而這個比較總是返回false
比較這些字符串的長度可以發現差異(存儲的字符串長一個符號)。 問題是如何準備第一個字符串(從textarea中提取)以使其完全等於第二個字符串(存儲在模型中)。JS比較字符串與換行符

P.S.他們都是typeof === 'string'

P.P.S. 主要問題是如何使Backbone在設置屬性時看到相等性:

this.model.set({ attr: textareaValue })

骨幹網使用下劃線的方法,只是在這種情況下,兩個字符串比較:

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

上'替換/ \ r \ n/g'所以你不要用'結束\ r \ r \ N'如果字符串確實有'\ r' –

回答

1

的問題是在\r字符:通過把手渲染textarea的值爲Some\ntext而存儲在模型的字符串是Some\r\ntext)。 而這並獲得成功:textarea.value.replace(/\n/gm, '\r\n');

+0

而不是更換自己的行結束,我發現它是有用的使用https://github.com/ryanve/eol –

3

我的第一個想法是從兩個字符串中刪除所有非字母字符,並在之後進行比較。

str.replace(/[^a-zA-Z]/g, ""); 
+0

?是的,它的工作原理!但問題是如何讓Backbone在設置屬性時看到這種相等性:'''this.model.set({attr:textareaValue})'''。它使用了Underscore的方法,它在這種情況下簡單地比較兩個字符串:'''return''+ a ===''+ b;''' –

+0

哪個字符串有換行符? –

+0

我在兩個字符串上應用了encodeURIComponent:結果是'''某些%0Atext vs某些%0D%0Atext'''。所以你看到第二個字符是/ r(它是由Handlebars渲染的)。 –