Javascript 让textarea正确计数换行符

Javascript 让textarea正确计数换行符,javascript,jquery,html,Javascript,Jquery,Html,我一直把头撞在墙上,试图找出从文本区域获取角色倒计时的最佳方式。我已经创建了这个,但是如果我在lipsum.com上粘贴了4000个字符,那么它会显示超过12个字符。我知道这是因为换行,但我不确定如何让它正确工作,并在浏览器之间保持一致 $('textarea').on('keyup', function() { characterCount(this); }); $('textarea:not(:empty)').each(function() { characterCount(this

我一直把头撞在墙上,试图找出从文本区域获取角色倒计时的最佳方式。我已经创建了这个,但是如果我在lipsum.com上粘贴了4000个字符,那么它会显示超过12个字符。我知道这是因为换行,但我不确定如何让它正确工作,并在浏览器之间保持一致

$('textarea').on('keyup', function() {
 characterCount(this);
});

$('textarea:not(:empty)').each(function() {
 characterCount(this);
});

function characterCount(that) {
var $this         = $(that),
    $maxLength    = $this.attr('data-val-length-max'),
    $lengthOfText = $this.val().length,
    $charCountEl  = $this.closest('.form-group').find('.maxchar-count');

if($maxLength) {
  $($charCountEl).text($maxLength - $lengthOfText);
}

if($lengthOfText > $maxLength) {
  $charCountEl.addClass('has-error');
} else {
  $charCountEl.removeClass('has-error');
}
}
还有标记

<div class="form-group">
<textarea rows="5" data-val-length-max="4000"></textarea>
<div>
    <span class="maxchar-count">4000</span>
</div>
</div>

4000
我见过一些类似的问题,但还没有找到适合我的答案

谢谢

亨利

试试看

$lengthOfText = $this.val().replace(/\n/g, '').length
而不是

$lengthOfText = $this.val().length
这样,您将在textarea中删除新行字符

如果希望避免总计数中出现所有类型的间距,可以使用

$lengthOfText = $this.val().replace(/\s/g, '').length

希望这能有所帮助。

您可以获得textarea的值,并使用replace删除换行符。这看起来已经完成了,非常感谢。我知道这将是一个正则表达式,但在这里尝试这个“\r\n?|\n”,我不确定我的解决方案是否在windows上工作。这也是可行的,而且可能也是跨平台的
$this.val().replace(/\r\n?|\n/g')。length
您的第一个似乎在Windows中工作,如果我在其他浏览器中发现任何问题,我将尝试其他正则表达式,再次感谢。