我有一些代码可以计算文本区域中的字符,任何字符,空格,无论该数字是否为“ 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
是实现这一目标的关键。所以我依稀隐约地认为我可以只计算所有字符,然后为每个
减去5,为<br>
加46,依此类推。
答案 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)>| )/g); // </ul>, </ol>, </li> and
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>