Textarea - 获取每一行,找到换行符

时间:2016-05-10 08:13:29

标签: javascript jquery html css textarea

我想在textarea中获取每一行。 textarea很小,根据宽度限制包装单词。所以我试过了:

// Sample text: I want to find(line wrapped) all lines here

$("#textarea1").val().split(/(\r\n|\n|\r)/gm).length
// 1, not the right length, should be 2

$("#textarea1").val().split(/\r?\n/g).length
// 1

$("#textarea1").val().split("\n").length
// 1

$("#textarea1").val().split("\r").length
// 1

我还单独和一起尝试了wrap="hard"white-space: pre-wrap

似乎没有找到换行符 !!需要帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

我认为就像你说的那样:textarea根据宽度限制包装单词 - 这意味着你找不到换行符。您正在查找的换行符是字符,并且这些字符尚未插入到您的文本中。

答案 1 :(得分:0)

所以我这样做的方式是:

  • textarea in question - $("#text")克隆到透明文本区域。使用透明字体。
  • 将克隆的id值更改为,例如$("#newtext")并将其附加到DOM。
  • 在每个keyup上,我们在this character's keyup之前取值$(“#text”)。将该值放入$("#newtext")并检查是否$("#newtext").get(0).scrollHeight() > $("#newtext").height()。如果为true => this字符导致换行符。
  • 在循环中增加$("#newtext")行,直到$("#newtext").get(0).scrollHeight() === $("#newtext").height()
  • this字符之前填写文字,添加\n,将this字符添加到$("#newtext").val()
  • $("#newtext").val()应用于$("#text").val()
  • 从DOM中删除$("#newtext")
  • 对每个keyup事件重复上述所有步骤

以上回答与 - stackoverflow.com/questions/3738490/finding-line-wraps – evolutionxbox yesterday

类似

因此,基本上我们将换行符转换为可以使用$("#text").val().split("\n")找到的换行符。

(注意 - 如果我们不向DOM添加透明文本区域,则其scrollHeight()将为undefined