Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript text区域-获取每一行,查找换行符_Javascript_Jquery_Html_Css_Textarea - Fatal编程技术网

Javascript text区域-获取每一行,查找换行符

Javascript text区域-获取每一行,查找换行符,javascript,jquery,html,css,textarea,Javascript,Jquery,Html,Css,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 $(

我想把每一行都放在一个文本区域。文本区域很小,并根据宽度限制包装单词。所以我试着:

// 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”
whitespace:pre-wrap
单独和一起使用

似乎没有发现换行符!!需要帮助,谢谢。

我想这就像你说的那样:文本区域根据宽度限制来包装单词-这意味着你找不到换行符。您要查找的换行符是字符,而这些字符尚未插入到您的文本中。

我想这就像您所说的:文本区域根据宽度限制来包装单词-这意味着您找不到换行符。您要查找的换行符是字符,这些字符尚未插入到您的文本中。

因此,我的做法是:

  • 将有问题的
    textarea-$(“#text”)
    克隆到透明的textarea中。使用透明字体
  • 将克隆的id值更改为,例如,
    $(“#newtext”)
    ,并将其附加到DOM中
  • 在每个keyup上,我们在
    这个字符的keyup
    之前取$(“#text”)的值。将该值放入
    $(“#新文本”)
    并检查
    $(“#新文本”).get(0).scrollHeight()>$(“#新文本”).height()
    。如果为true=>
    字符导致换行
  • 在循环中增加
    $(“#新文本”)
    行,直到
    $(“#新文本”)。获取(0)。scrollHeight()===$(“#新文本”)。height()
  • 字符之前提取文本,添加
    \n
    ,将
    字符添加到
    $(“#新文本”).val()
  • $(“#新文本”).val()应用于
    $(“#文本”).val()
  • 从DOM中删除
    $(“#newtext”)
  • 对每个keyup事件重复上述所有步骤
上述答案适用于与以下类似的行:

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


(注意-如果我们不将透明textarea附加到DOM中,它的
scrollHeight()
未定义

因此我这样做的方式是:

  • 将有问题的
    textarea-$(“#text”)
    克隆到透明的textarea中。使用透明字体
  • 将克隆的id值更改为,例如,
    $(“#newtext”)
    ,并将其附加到DOM中
  • 在每个keyup上,我们在
    这个字符的keyup
    之前取$(“#text”)的值。将该值放入
    $(“#新文本”)
    并检查
    $(“#新文本”).get(0).scrollHeight()>$(“#新文本”).height()
    。如果为true=>
    字符导致换行
  • 在循环中增加
    $(“#新文本”)
    行,直到
    $(“#新文本”)。获取(0)。scrollHeight()===$(“#新文本”)。height()
  • 字符之前提取文本,添加
    \n
    ,将
    字符添加到
    $(“#新文本”).val()
  • $(“#新文本”).val()应用于
    $(“#文本”).val()
  • 从DOM中删除
    $(“#newtext”)
  • 对每个keyup事件重复上述所有步骤
上述答案适用于与以下类似的行:

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


(注意-如果我们不将透明textarea附加到DOM,它的
scrollHeight()
将是
未定义的

我甚至不确定这是否可行。不遍历阴影DOM(不是每个浏览器都有)。这是因为包装是由于CSS,而不是保存在文本区域的值中。这个问题似乎非常相关:嗯,它非常相关,几乎可以完成工作!我甚至不确定这是否可能。不遍历阴影DOM(不是每个浏览器都有)。这是因为包装是由于CSS,而不是保存在文本区域的值中。这个问题似乎非常相关:嗯,它非常相关,几乎可以完成工作!检测字符宽度的问题在于它取决于字体大小和字体类型。例如,在塔荷马,l(小l)的宽度比G小得多,我想对于《泰晤士报新罗马版》来说,差别更小。检测字符宽度的问题在于它取决于字体大小和字体类型。例如,在塔荷马,l(小l)的宽度比G小得多,我想对于《泰晤士报新罗马版》来说,差别更小。这让事情变得复杂。