用jQuery计算字符数

时间:2011-03-01 22:12:32

标签: jquery

我需要能够在键入文本时对textarea中的字符进行计数,除了被{}包围的任何内容。我需要打印文本区域下方的计数。我在JavaScript中看到了一些计数器,但我不确定如何从中排除{封闭文本}。我是否点击了?

<textarea id="myInput"></textarea>
Counter: <span id="charCount"></span>

感谢。

4 个答案:

答案 0 :(得分:7)

你走了:

$('#myInput').keyup(function() {
    $('#charCount').text( this.value.replace(/{.*}/g, '').length );
});

现场演示: http://jsfiddle.net/simevidas/8R9DH/


我使用的正则表达式不是最好的选择。使用@Matt或@Pointy提供的正则表达式文字。


这里:

var input = $('#myInput'),
    count = $('#charCount'),
    limit = 10;

input.keyup(function() {
    var n = this.value.replace(/{.*?}/g, '').length;
    if ( n > limit ) {
        this.value = this.value.substr(0, this.value.length + limit - n);
        n = 10;
    }
    count.text( n );
}).triggerHandler('keyup');

现场演示: http://jsfiddle.net/simevidas/8R9DH/2/

答案 1 :(得分:4)

像这样的东西。我使用了keyup而不是change,因为change事件只会在失去焦点时触发textarea。

var $input = $('#myInput'),
    $output = $('#charCount'),
    re_strip = /\{.*?\}/g;

$input.keyup(function ()
{
    var val = $(this).val();
    val = val.replace(re_strip, '');
    $output.text(val.length);
});

Demo →

答案 2 :(得分:3)

你可以试试这个:

$('#myInput').change(function() {
  $('#charCount').text(this.value.replace(/{[^}]*}/, '').length);
});

现在要了解一件重要的事情:通常,您会计算textarea中的字符以防止数据库字段溢出。因此,让用户放弃所有可能的角色很重要,但是你不想在没有警告的情况下切断任何东西。问题是IE和其他浏览器使用嵌入式换行符做了不同的事情。我不记得究竟是哪一个(我会弄清楚并更新答案),但是一个/一些浏览器包括CR-LF对作为行分隔符,而一个/一些不包括。

编辑 - 好的我还记得更多 - 问题是,当你获得<textarea>“值”时,返回JavaScript的字符串之间存在差异(在某些浏览器中)属性和浏览器实际发回主机的字符串。 (是的。)因此,当你检查长度时,必须考虑这种奇怪的行为。这是我使用的代码:

var
  adjust = ta.val().match(/[^\r]\n/g),
  alen = adjust ? adjust.length : 0,
  actual = ta.val().length + alen,
  ratio = Math.max(actual/ml);

变量“ta”有一个<textarea> DOM元素。首先,变量“adjust”设置为值中找到的换行符数,不带前一个回车符。如果找到了一些,则从内容的普通长度中减去该总数,得到“actual”,这应该是浏览器在发布表单时发送回服务器的实际字符数。

答案 3 :(得分:0)

类似的东西:

$("#myInput").change(function(){

n = this.val().length;
$('#charCount').text = n;
});