我遇到了很多关于这个问题的问题,我只找到了PHP的解决方案。在这个网站上没有jQuery/javascript的解决方案。
我想要做的是,我想要显示前100个字符,但我不想剪掉最后一个单词,因为它将毫无意义。
就像说this is myself
是最后一个单词,所以如果我们经常取子字符串,y
是第100个单词,那么它会像this is my
一样切割它,这将是意义更少。所以我想把它改成this is..
我的原始代码:
jQuery(".block-text .success-inner-content").each(function(){
if(jQuery(this).text().length > 100){
jQuery(this).text(jQuery(this).text().substr(0,98)+'..');
}
});
这里block-text .success-inner-content
类在循环中生成带有文本的div列表。
lastIndexOf
方法接受第二个参数,该参数决定搜索从哪里开始,因此您不需要在找到最后一个空格之前切断字符串:
jQuery(".block-text .success-inner-content").each(function () {
var text = jQuery(this).text();
if (text.length > 100) {
jQuery(this).text(text.substr(0, text.lastIndexOf(' ', 97)) + '...');
}
});
您也可以使用text
方法而不是each
来循环元素并为每个元素设置文本:
jQuery(".block-text .success-inner-content").text(function (i, text) {
return text.length > 100 ? text.substr(0, text.lastIndexOf(' ', 97)) + '...' : text;
});
或者您可以使用regex…像这样-
var s = 'What I want to do is I want to show first 100 characters but I don't want to cut the last word, as it would be meaningless.';
console.log(s.match(/(.{1,19}w)s/)[1]+'...');
匹配任意20个字符,以单词字符结尾,后跟一个空格。
对
我自己解决了。该解决方案使用了javascript的substr()
和最重要的lastIndexOf()
函数。
jQuery(".block-text .success-inner-content").each(function () {
if (jQuery(this).text().length > 100) {
var str = jQuery(this).text().substr(0,98);
var wordIndex = str.lastIndexOf(" ");
jQuery(this).text(str.substr(0, wordIndex) + '..');
}
});