jQuery - 计算 TEXTAREA 中的单词 [重复]
Posted
技术标签:
【中文标题】jQuery - 计算 TEXTAREA 中的单词 [重复]【英文标题】:jQuery - count words in TEXTAREA [duplicate] 【发布时间】:2013-12-06 15:06:06 【问题描述】:嗯,我有一个 javascript 函数,它返回我写入文本区域的单词数,但由于某些原因,我想使用 Jquery 编写它。而且,虽然我试过了,但我没有成功,所以这就是我在这里的原因,如果你能帮助我,我将非常非常感激。
这是 Javascript:
function contar()
palabras = 1;
if (document.data.texto.value.length === '') palabras = 0;
for (count = 0; count < document.data.texto.value.length; count++)
if (document.data.texto.value.substring(count, count + 1) == ' ') palabras++;
document.data.cuenta.value = palabras;
这是我制作的 jQuery:
(function ()
var palabras = 1;
if ($("[name=data] textarea[name=texto]").val().length === "")
palabras = 0;
for (i = 0; i < $("[name=data] textarea[name=texto]").val().length; i++)
if ($("[name=data] textarea[name=texto]").val().substring(i, i + 1) == ' '))
palabras++;
);
最后,这是我用来显示它的 html:
<form name="data">
<textarea name="texto" cols="40" rows="4" onkeyup="contar()" onkeypress="contar()"></textarea>
<br>
<input type="Text" name="cuenta" size="3" maxlength="3">
</form>
【问题讨论】:
.length
是整数,而不是字符串,所以 .length === ""
不起作用。
现在还不算字数,是吗?
只计算空格还是需要忽略多空格?
关于这一行:if (document.data.texto.value.length === '')
长度如何等于空字符串?您应该使用document.getElementById
函数访问您的节点,这样更实用;
[重复] 标记毫无意义。主要问题是计算 words 而不是 characters。此问题在建议的重复问题中没有解决方案。
【参考方案1】:
一个可行的解决方案:
function contar()
alert($.trim($('[name="texto"]').val()).split(' ').filter(function(v)return v!=='').length);
filter(function(v)return v!=='')
部分删除空字符串。
http://jsfiddle.net/qhaYH/
【讨论】:
我已经设法让它工作(我需要一个窗口加载事件并在主机将它们转换为 $ 时更改所有“$”,但仅此而已)。此外,我删除了 .on 事件,因为 .click 是唯一使用的事件,所以我认为没有必要。不管怎样,你救了我的命,谢谢你:P【参考方案2】:我想到的最简单的解决方案如下:
//function
function countWords(tx)
return tx?tx.replace(/ +/g," ").replace(/\w+| $|^ /g,"").length+1:0;
//jQuery plugin
$.fn.countWords = function()
return countWords(this.val()) ;
;
示例 HTML:
<textarea id="tester"></textarea>
<p>WordsCount:<span id="counter">0</span></p>
JS:
$tester = $("#tester");
$tester.keyup(function(e)
$("#counter").text($tester.countWords());
);
http://jsbin.com/EfukoYIs/3/edit?html,js,output
编辑 最后我改变了概念,只计算正确含义的单词(没有特殊字符等)。代码如下:
//function
function countWords(tx)
return tx.replace(/\w+/g,"x").replace(/[^x]+/g,"").length;
IMO 它好多了。 http://jsbin.com/EfukoYIs/5/edit?html,js,output
【讨论】:
是的,它在jsbin中可以工作,但是当我尝试在网页中使用它时,我无法正常使用它(可能是主机的错,因为我真的不知道他们有什么版本的 jQuery,但我完全确定他们甚至没有 1.9.1 :/) 如果你想知道,我在 jquery 的 srcipt 之后的两个脚本标签之间添加了 Jquery 部分,但它甚至在 jsbin 中都不起作用>. 也许可见性范围是你的问题。从我的立场很难说。我认为主要问题是将您的函数逻辑转换为以 jQuery 方式使用。对于您的 HTML 代码,只需简单的代码即可:alert($('[name="texto"]').countWords());
【参考方案3】:
获取文本区域的值,并将其拆分为空格字符,这将为您提供一个数组。然后返回该数组的长度。
更新空字符串http://jsfiddle.net/ghyDs/1/
<script type="text/javascript">
function contar()
var value = $.trim($('[name="texto"]').val()),
count = value == '' ? 0 : value.split(' ').length;
$('[name="cuenta"]').val(count);
</script>
【讨论】:
刚刚更新了我的答案 而且它比以前更没有意义了。 @adeneo 检查小提琴,也许这会有所启发 文本框为空时返回 1。当后面有 2 个空格时,它算一个单词。而且您忘记命名函数或将其存储到变量中。 后面有2个空格的时候还是算一个字以上是关于jQuery - 计算 TEXTAREA 中的单词 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 JS 或 Jquery 检测 textarea 中的 url
我想使用 javascript 检查 textarea 的内容必须包含以前输入的单词
使用PHP逐行读取textarea中的单词并插入到mySQL