1

我正在开发一个博客主题,该主题对每篇文章的每个条目都有字数。我可以让字数统计工作,但它只适用于第一个条目,然后为每个帖子显示相同的字数。我需要修改下面的脚本以找到最接近的div.entrycontent并计算其中的单词,但对于每个条目。以下是我的条目标记代码,如果有人可以提供帮助,将不胜感激。

<div class="entry">
    <div class="entryinfo">
        <script type="text/javascript">
            var text = $('.entrycontent').text();
            var wordCount = text.split(' ').length;
            $("span.words").text(wordCount + ' words');
        </script>
        <span class="words"></span>
    </div>
    <div class="entrycontent">
        Lorem ipsum dolor amet...
    </div>
</div>
4

3 回答 3

2

您需要循环使用.each().

将此脚本放在页面上一次,在块内的底部或顶部$(document).ready(function(){...});

$('.entry').each(function(i,el) {
    var $entry = $(this),
        text = $entry.find('.entrycontent').text(),
        wordCount = text.split(' ').length;
    $entry.find("span.words").text(wordCount + ' words');
    $entry.find("span.chars").text(charCount); // IDs must be unique, use classes instead
});

更新

$entry.find('.entrycontent').text()包含大量空格时,无论是否分隔单词,它都会在每个空格字符上进行拆分。试试这个:

$('.entry').each(function(i,el) {
    var $entry = $(this),
        text = $entry.find('.entrycontent').text(),
        wordCount = text.split(/\s+/).length;
    $entry.find("span.words").text(wordCount + ' words');
});

.split()文档

更新 2

好吧,如果你想要一个真正的字数,我想我们应该使用.match()而不是.split()

$('.entry').each(function(i,el) {
    var $entry = $(this),
        text = $entry.find('.entrycontent').text(),
        marr = text.match(/\w+/g) || [],  // null if no matches
        wordCount = marr.length;
    $entry.find("span.words").text(wordCount + ' words');
});
于 2012-05-25T15:43:29.460 回答
0
$('.entry').each(function() {
 var text = $(".entrycontent", this).text(),
     wordCount = text.split(/\s+/).length;
 $("span.words", this).text(wordCount + ' words');
 $("span#chars", this).text(charCount);
})
于 2012-05-25T15:43:43.247 回答
0

它可能与您的选择器绑定到任何具有 entrycontent 类的元素有关。

我建议像这样遍历每个条目:

$(".entrycontent").each(function() {
    var entryInfo = $(this).prev();
    var text = $(this).text(); 
    var wordCount = text.split(' ').length;  
    entryInfo.find("span.words").text(wordCount + ' words');  
});
于 2012-05-25T15:49:44.880 回答