Javascript字数截止

Javascript字数截止,javascript,blogs,word-count,Javascript,Blogs,Word Count,我有一个ID为“shortblogpost”的div。我想数到第27个单词,然后停下来,在末尾加上“…” 我正在尝试以下代码。问题是,数数字母而不是单词。我认为这是使用jQuery而不是使用JavaScript 我只需要出于各种服务器原因使用JavaScript <script type="text/javascript"> var limit = 100, text = $('div.shortblogpost').text().split(/

我有一个ID为“shortblogpost”的div。我想数到第27个单词,然后停下来,在末尾加上“…”

我正在尝试以下代码。问题是,数数字母而不是单词。我认为这是使用jQuery而不是使用JavaScript

我只需要出于各种服务器原因使用JavaScript

<script type="text/javascript">
var limit        = 100,
    text         = $('div.shortblogpost').text().split(/\s+/),
    word,
    letter_count = 0,
    trunc        = '',
    i            = 0;

while (i < text.length && letter_count < limit) {
  word         = text[i++];
  trunc       += word+' ';
  letter_count = trunc.length-1;

}

trunc = $.trim(trunc)+'...';
console.log(trunc);
</script>

var限值=100,
text=$('div.shortblogpost').text().split(/\s+/),
单词
字母计数=0,
trunc=“”,
i=0;
while(i

请提前向所有人寻求帮助。

循环将逐字追加,而(有个单词&&字母数低于限制)。您只需将第二个条件替换为“&&字数低于限制”

将此伪代码转换为JS应该很简单…

Truncate函数

用法:truncate('这是对该函数的测试',2); 退货:这是

用法:truncate('这是对这个函数的测试',5,'++'); 返回:这是对+++

function truncate (text, limit, append) {
    if (typeof text !== 'string')
        return '';
    if (typeof append == 'undefined')
        append = '...';
    var parts = text.split(' ');
    if (parts.length > limit) {
        // loop backward through the string
        for (var i = parts.length - 1; i > -1; --i) {
            // if i is over limit, drop this word from the array
            if (i+1 > limit) {
                parts.length = i;
            }
        }
        // add the truncate append text
        parts.push(append);
    }
    // join the array back into a string
    return parts.join(' ');
}
编辑: 通过OP的参数快速且脏的机具:

<script type="text/javascript">
// put truncate function here...

var ele = document.getElementById('shortblogpost');
ele.innerHTML = truncate(ele.innerHTML, 20);
</script>

//把截断函数放在这里。。。
var ele=document.getElementById('shortblogpost');
ele.innerHTML=truncate(ele.innerHTML,20);
这应该可以:

var words = $('div.shortblogpost').text().replace( /\s/g, ' ' ).split( ' ' );
var result = "";
for( var w = 0 ; w < 27 ; w++ ) {
    if( words[w].length > 0 ) {
        result += words[w] + ' ';
    }
}
result = result.trim() + "...";
var words=$('div.shortblogpost').text().replace(/\s/g').split(“”);
var结果=”;
对于(var w=0;w<27;w++){
如果(字[w]。长度>0){
结果+=字[w]+'';
}
}
结果=result.trim()+“…”;

这可以在一行代码中完成:

myString.replace(/(([^\s]+\s+){27}).+/, "$1...");
或者,您可以将其设置为一个函数:

function truncateString(s, wordCount)
{
    var expr = new RegExp("(([^\\s]+\\s+){" + wordCount + "}).+");
    return s.replace(expr, "$1...");
}
因此,要使此功能适用于您的代码,您可以执行以下操作:

var post = $('div.shortblogpost').text();  // get the text
post = postText.replace(/(([^\s]+\s+){27}).+/, "$1...");  // truncate the text
$('div.shortblogpost').text(post);  // update the post with the truncated text
这个怎么样

html:


嗯,你的答案似乎很简单…但我得到了我开始使用的代码。当我努力自学更多JS时,我还没有达到可以自己实现你答案的程度。@webmaster alex l:嗯,
i
似乎掌握着你目前在
trunc
中的字数,而且有一个
限制
…你试图找出其中一个是否比另一个大……好吧……我试图提出你的答案,但运气不太好……假设我对JS一无所知(半真半假:))好吧,添加了一个快速而肮脏的实现。尽管我还将补充一条警告,您应该尝试更好地理解javascript和HTML是如何协同工作的——无方向地到处乱翻是灾难的秘诀。Congaz!你的代码成功了!:)问题是您在id上使用了$('div.shortblogpost'),而您应该在id上使用$('div#shortblogpost');嘿,谢谢。。。但平心而论,这里的其他一些答案也是如此。这不是简单地编写有效的代码的问题,而是以一种没有经验的人可以有效地使用它的方式来编写代码的问题!:)我一定是做错了短博客。替换(/([^\s]+\s+{24})。+/,“$1…”);但是谢谢你的简短而甜蜜的回答我喜欢你的幽默。我不能毫不犹豫和测试地写出准确的正则表达式。@webmaster alex-我已经更新了我的答案,以提供更具体的代码。希望对您有所帮助。我发表了此评论,请让我知道它是否会影响您的代码。。。。。。。。。。。[文本在以下“+data.entries[i].Extrapt+”页面下方,我添加了你的JS,然后将结果删除。我认为它会将结果弹出到正确的分区]哈哈,我可以编辑了,我现在正在测试你的答案,你之前的帖子没有用:/。。。尝试新编辑是div#shortblogpost中的文本吗?你能帮我一个忙吗,它还没有工作,但是你能给getElementByID添加一个警报弹出窗口,看看它是否找到了我的shortblogpost。我确定问题出在我这方面,而不是你的代码,但我想检查一下。文本在下面“+data.entries[i].extract+”中,在页面的下一步,我添加了你的JS,然后将结果删除。我以为它会把结果放回正确的分区实际上最好的是@gilly3,但是用户体验>最佳答案!
<div id='shortblogpost'>test test test test test test test test test test test</div>
alert(document.getElementById('shortblogpost').innerHTML);
var numWordToDisplay = 3; //how many words u want to display in your case 27
var newArray = document.getElementById('shortblogpost').innerHTML.split(' ');
if(newArray.length >= numWordToDisplay )
    newArray.length = numWordToDisplay;
console.log(newArray.join(' ') + '...'); //test test test...