【问题标题】:jQuery - count words in TEXTAREA [duplicate]jQuery - 计算 TEXTAREA 中的单词 [重复]
【发布时间】: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。此问题在建议的重复问题中没有解决方案。

标签: javascript jquery


【解决方案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个空格的时候还是算一个字
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2013-12-09
  • 2019-10-16
  • 2013-09-21
  • 2023-04-11
  • 1970-01-01
  • 2017-10-09
相关资源
最近更新 更多