【问题标题】:Javascript Strings don't compare, escape characters not being escaped when using jQuery.val() funcJavascript 字符串不比较,使用 jQuery.val() func 时未转义转义字符
【发布时间】:2010-01-24 07:54:57
【问题描述】:

我有:

<input type="text" value="Raphaël\nkicks\nbutt!" id="tzbox_txt">

var inputText = $("#tzbox_txt").val(); 
var stringText = "Raphaël\nkicks\nbutt!"
inputText === stringText - false!

如果我使用$(input).val(),我会得到"Raphaël\nkicks\nbutt!",其中\n 不会被解释为换行符。 如果我这样做var text = "Raphaël\nkicks\nbutt!",它会被转义,并且文本会显示换行符。

如何使用换行符解释输入文本值?

【问题讨论】:

    标签: javascript jquery string comparison


    【解决方案1】:

    如果你想要多行文本输入,你应该使用文本区域而不是输入文本框。文本框只有一行文本,所以没有换行符。

    编辑:如果要将序列 \n 视为换行符,请进行搜索和替换:

    var s = "this\\nis\\na\\ntest";
    var unescaped = s.replace("\\n", "\n");
    

    字符串中的内容是一个反斜杠文字,后跟一个 n。此搜索和替换将文字“\n”替换为换行符。

    【讨论】:

    • 我确实想要多行文本,但它需要从文本框中进行解释。我的问题是,是否有办法用换行符来解释文本框值中的文本?
    • @mercury22:您可以进行简单的搜索和替换(根据编辑的答案)。
    • 感谢 Cletus 我支持您的回答,但 Doug 较早进行搜索和替换
    【解决方案2】:

    input[type=text] 元素不能包含换行符,因为text 输入只接受单行文本。您认为的换行符转义序列被解释为纯文本。

    如果您想匹配它,请将匹配代码更改为此,因为这正是 val() 函数返回的内容:

    var stringText = "Raphaël\\nkicks\\nbutt!";
    

    如果您想反过来匹配它,并且您的input 元素包含'\n'文本序列,您可以在测试之前对文本值进行替换:

    var inputText = $("#tzbox_txt").val().replace(/\\n/g,"\n");
    var stringText = "Raphaël\nkicks\nbutt!";
    inputText === stringText; // true
    

    【讨论】:

    • 这将匹配,但我的问题是是否有办法用换行符解释文本框值中的文本?
    • @mercury22 我更新了我的答案以反过来解决问题,但请注意,无论您做什么,这都是一种解决方法或黑客攻击。 input 元素不能包含原生意义上的多行文本。
    【解决方案3】:

    我认为这里的基本问题是,在输入文本框中,\n 被解释为反斜杠和字母 n,而在 var 语句中,\n 被转换为实际的换行符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      相关资源
      最近更新 更多