【问题标题】:How to read line by line of a text area HTML tag如何逐行读取文本区域 HTML 标记
【发布时间】:2012-03-01 02:27:53
【问题描述】:

我有一个文本区域,其中每一行都包含整数值,如下所示

      1234
      4321
     123445

我想检查用户是否真的输入了有效值,而不是像下面这样的一些有趣的值

      1234,
      987l;

为此,我需要逐行阅读文本区域并进行验证。 如何使用 javascript 逐行读取文本区域?

【问题讨论】:

标签: javascript jquery html textarea


【解决方案1】:

试试这个。

var lines = $('textarea').val().split('\n');
for(var i = 0;i < lines.length;i++){
    //code here using lines[i] which will give you each line
}

【讨论】:

  • 不要使用$('textarea').val() 使用document.getElementById('textareaId').innerHTML 就是这样。
  • 我记得我们使用了另一种方法。我们使用了 form.elementname 什么的。我的意思是很久以前。 6-7 年前,当 DOM 还很新时
  • 是的,您甚至可以使用 document.formname.textareName.value 访问它
  • 行是否保证以 \n 而不是 \r\n 结尾?
  • 对于那些在 2020 年来到这里的人,我无法确定添加上述 cmets 时浏览器的行为是什么,但目前 Chrome 无法识别 document.getElementById('textarea').innerHTML除非它已经作为占位符文本加载到 DOM 的原始加载中。您需要使用 document.getElementById('textarea').value 来访问用户输入或修改的任何文本。在页面加载时,占位符文本作为内部 HTML 放置在 标记之间,但在用户添加输入时不会修改。
【解决方案2】:

这不需要 jQuery:

var textArea = document.getElementById("my-text-area");
var arrayOfLines = textArea.value.split("\n"); // arrayOfLines is array where every element is string of one line

【讨论】:

    【解决方案3】:

    这将为您提供lines 中的所有有效数值。您可以更改循环以验证、去除无效字符等 - 随心所欲。

    var lines = [];
    $('#my_textarea_selector').val().split("\n").each(function ()
    {
        if (parseInt($(this) != 'NaN')
            lines[] = parseInt($(this));
    }
    

    【讨论】:

    • 一般来说,您几乎总是希望将第二个参数传递给 parseInt 以强制读取以 10 为底/十进制 (parseInt(this, 10))。否则,前导零会导致解释为基数 8(八进制),这可能会导致一些相当奇怪的行为......
    【解决方案4】:

    两个选项:不需要 JQuery,或者 JQuery 版本

    无需 JQuery(或其他任何要求)

    var textArea = document.getElementById('myTextAreaId');
    var lines = textArea.value.split('\n');    // lines is an array of strings
    
    // Loop through all lines
    for (var j = 0; j < lines.length; j++) {
      console.log('Line ' + j + ' is ' + lines[j])
    }
    

    jQuery 版本

    var lines = $('#myTextAreaId').val().split('\n');   // lines is an array of strings
    
    // Loop through all lines
    for (var j = 0; j < lines.length; j++) {
      console.log('Line ' + j + ' is ' + lines[j])
    }
    

    旁注,如果您更喜欢 forEach 示例循环是

    lines.forEach(function(line) {
      console.log('Line is ' + line)
    })
    

    【讨论】:

      【解决方案5】:

      一个简单的正则表达式应该可以有效地检查您的文本区域:

      /\s*\d+\s*\n/g.test(text) ? "OK" : "KO"
      

      【讨论】:

        猜你喜欢
        • 2013-07-09
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 2016-09-03
        • 2012-04-12
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多