我有一个ID为“shortblogpost”的div。我想数到第27个字然后停止并在最后加上“......”。
我正在尝试以下代码。问题,它是计数字母而不是单词。我认为它使用jQuery而不是strait up 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>
提前提供任何帮助。
答案 0 :(得分:7)
截断功能。
使用: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>
答案 1 :(得分:5)
这可以在一行代码中完成:
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
答案 2 :(得分:1)
循环逐字追加,而(有字和&amp;&amp;字母数低于限制)。您唯一需要做的就是将第二个条件替换为“&amp;&amp;字数低于限制”。
将此伪代码转换为JS应该是微不足道的......
答案 3 :(得分:1)
这个怎么样? jsfiddle
HTML:
<div id='shortblogpost'>test test test test test test test test test test test</div>
javascript:
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...
答案 4 :(得分:0)
这应该有效:
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() + "...";