Javascript jQuery-计算TEXTAREA中的单词数

Javascript jQuery-计算TEXTAREA中的单词数,javascript,jquery,Javascript,Jquery,嗯,我有一个Javascript函数,它返回我写入textarea的字数,但出于某些原因,我想使用Jquery编写它。虽然我试过了,但还是没能拿到,所以这就是我来这里的原因,如果你能帮助我,我将非常非常感激 这是Javascript: function contar() { palabras = 1; if (document.data.texto.value.length === '') palabras = 0; for (count = 0; count < document.dat

嗯,我有一个Javascript函数,它返回我写入textarea的字数,但出于某些原因,我想使用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;}
函数contar(){
帕拉布拉斯=1;
如果(document.data.texto.value.length=='')palabras=0;
for(count=0;count
这是我提出的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++;
        }
    }
});
(函数(){
var palabras=1;
if($(“[name=data]textarea[name=texto]”).val().length==“”){
帕拉布拉斯=0;
}
对于(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>



获取textarea的值,并将其拆分为空格字符,这将为您提供一个数组。然后返回该数组的长度

已更新空字符串的


函数contar(){
var值=$.trim($('[name=“texto”]').val()),
count=value=''?0:value.split('').length;
$('[name=“cuenta”]').val(计数);
}
工作解决方案:

function contar(){
        alert($.trim($('[name="texto"]').val()).split(' ').filter(function(v){return v!==''}).length);
}
过滤器(函数(v){return v!=''})
部分删除空字符串


我想到的最简单的解决方案如下:

//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:

编辑
最后,我改变了概念,只计算正确意义上的单词(没有特殊字符等)。守则如下:

//function
function countWords(tx){
  return tx.replace(/\w+/g,"x").replace(/[^x]+/g,"").length;
}
我觉得好多了。

.length
是一个整数,不是字符串,所以
.length==“”
不起作用。现在这不算单词了,是吗?它只算空格还是需要省略多空格?关于这一行:
如果(document.data.texto.value.length==“”)
一个长度如何可以等于一个空字符串?您应该使用
document.getElementById
函数访问节点,这样更实用;[重复]标记没有意义。主要的问题是计算单词而不是字符。这个问题在建议的重复问题中没有解决方案。只是更新了我的答案,它比以前更有意义。@adeneo检查小提琴,也许这会有一些启发。当文本框为空时,它返回我1。当后面有两个空格时,它计算一个单词。你忘了给你的函数命名或者把它存储到一个变量中。当有两个空格在后面时,它仍然计算一个单词,它在jsbin中工作,但是当我试图在网页中使用它时,我无法正确地使用它(可能是主机的错,因为我不知道他们有什么版本的jQuery,但我完全确定他们甚至没有1.9.1:/)如果你想知道的话,我已经在Jquery的srcipt之后的两个脚本标记之间添加了Jquery部分,但它在jsbin>中甚至不起作用。<是的,我知道我在这方面很不在行……也许可见性范围是你的问题。从我的立场上很难说。我假设主要的问题是将函数逻辑转换为以Jquery的方式使用。F或者您的HTML代码只需要简单的代码就可以了:
alert($('[name=“texto”]').countWords());
我已经设法让它工作了(我需要一个窗口加载事件,并在主机将所有“$”转换为$;时更改它们,但仅此而已).此外,我已经删除了.on事件,因为.click是唯一使用的事件,所以我认为没有必要。无论如何,你救了我的命,谢谢你:P
<textarea id="tester"></textarea>
<p>WordsCount:<span id="counter">0</span></p>
$tester = $("#tester");
$tester.keyup(function(e){
  $("#counter").text($tester.countWords());
});
//function
function countWords(tx){
  return tx.replace(/\w+/g,"x").replace(/[^x]+/g,"").length;
}