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 的内容必须包含以前输入的单词

突出显示textarea angular 8中的特定单词

使用PHP逐行读取textarea中的单词并插入到mySQL

Javafx 8 替换 textarea 中的文本并保持格式

使用 jQuery 限制 textarea 中的行数和显示行数