jQuery:计算字符数,为某些标签赋予不同的计数

时间:2018-06-26 14:35:31

标签: jquery counting

我有一些代码可以计算文本区域中的字符,任何字符,空格,无论该数字是否为“ 1”。这很好。但是我想用不同的方式来计算一些字符串:

  • 字母,字符,空格= 1个字符
  •   = 1个字符
  • <li> = 3个字符
  • <br><br/> = 50个字符
  • <ol></ol><ul></ul></li> = 0个字符

这是正常的1对1代码:

   <textarea id="field" onkeyup="countChar(this)"></textarea>
    <div id="charNum"></div>

$('#field').keyup(function () {
  var max = 100;
  var len = $(this).val().length;
  if (len >= max) {
    $('#charNum').text(' that\'s the limit');
  } else {
    var char = max - len;
    $('#charNum').text(char + ' characters left');
  }
});

这里被剪掉的编辑器起作用了(但是给了我很多错误):https://jsfiddle.net/yello/bq7rez9t/

我不清楚该怎么做,我隐约相信length是实现这一目标的关键。所以我依稀隐约地认为我可以只计算所有字符,然后为每个&nbsp;减去5,为<br>加46,依此类推。

1 个答案:

答案 0 :(得分:2)

您的想法成功了。使用正则表达式计算特殊情况并相乘。

$('#field').keyup(function () {
  var max = 100;
  var txt = $(this).val();
  var len = txt.length;
  var cnt=txt.match(/<li>/g); // <li>
  len-=cnt?cnt.length:0;
  cnt=txt.match(/<(u|o)l>/g); // <ul> and <ol>
  len-=cnt?cnt.length*4:0;
  cnt=txt.match(/(<\/((u|o)l|li)>|&nbsp;)/g); // </ul>, </ol>, </li> and &nbsp;
  len-=cnt?cnt.length*5:0;
  cnt=txt.match(/<br\/>/g); // <br/>
  len+=cnt?cnt.length*45:0;
  cnt=txt.match(/<br>/g); // <br>
  len+=cnt?cnt.length*46:0;
  if (len >= max) {
    $('#charNum').text(' that\'s the limit');
  } else {
    var char = max - len;
    $('#charNum').text(char + ' characters left');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="field"></textarea>
   <div id="charNum"></div>