我正在开发一个博客主题,每个帖子的每个条目都有一个字数。我可以让单词计数工作,但它只适用于第一个条目,然后显示每个帖子的相同计数。我需要修改下面的脚本以找到最接近的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>
答案 0 :(得分: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');
});
更新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');
});
答案 1 :(得分: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);
})
答案 2 :(得分: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');
});