Javascript / jQuery从字符串中获取前100个字符,尊重完整单词

时间:2015-08-13 13:14:10

标签: javascript jquery html regex substring

我遇到了很多关于此的问题,我找到了仅适用于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列表。

3 个答案:

答案 0 :(得分:8)

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;
});

答案 1 :(得分:4)

或者你可以用正则表达式做这件事......

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个字符,以单词字符结尾,后跟空格。

此致

答案 2 :(得分:1)

我解决了自己。该解决方案使用substr()和最重要的lastIndexOf() javascript函数。

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) + '..');
    }
});