Как обрезать строку по количеству символов и вставить многоточие в конце?

Рейтинг: 0Ответов: 3Опубликовано: 05.09.2014

Приветствую.

Суть задачи в заголовке.

Есть код, который выводит tweets.
http://jsfiddle.net/yuk46po7/

Требуется обрезать parseTweet(data[i].text), текст в списке по количеству символов.

Выручайте.

Ответы

▲ 3

Есть замечательное свойство в CSS3:

.twitter-list li{  
height: 30px;
text-overflow: ellipsis;  
}

Но если Вы хотите именно заданное количество символов, то воспользуйтесь кодом @eicto.
Внесу доработку в его код:

var sliced = text.slice(0,10);
if (sliced.length < text.length) {
sliced += '...';
}

Переменная sliced будет содержать обрезанный текст с многоточием, если обрезанный текст меньше исходного.

▲ 3
function kitcut( text, limit) {
  text = text.trim();
  if( text.length <= limit) return text;
  text = text.slice( 0, limit); // тупо отрезать по лимиту
  lastSpace = text.lastIndexOf(" ");
  if( lastSpace > 0) { // нашлась граница слов, ещё укорачиваем
    text = text.substr(0, lastSpace);
  }
  return text + "...";
}

Оформил это как метод прототипа объекта String (пример с тестами):

String.prototype.limit = function( limit, userParams) {
    var text = this
      , options = {
            ending: '...'  // что дописать после обрыва
          , trim: true     // обрезать пробелы в начале/конце?
          , words: true    // уважать ли целостность слов? 
        }
      , prop
      , lastSpace
      , processed = false
    ;

    //  проверить limit, без него целого положительного никак
    if( limit !== parseInt(limit)  ||  limit <= 0) return this;

    // применить userParams
    if( typeof userParams == 'object') {
        for (prop in userParams) {
            if (userParams.hasOwnProperty.call(userParams, prop)) {
                options[prop] = userParams[prop];
            }
        }
    }

    // убрать пробелы в начале /конце
    if( options.trim) text = text.trim();

    if( text.length <= limit) return text;    // по длине вписываемся и так

    text = text.slice( 0, limit); // тупо отрезать по лимиту
    lastSpace = text.lastIndexOf(" ");
    if( options.words  &&  lastSpace > 0) {  // урезать ещё до границы целого слова
        text = text.substr(0, lastSpace);
    }
    return text + options.ending;
}
▲ 1

или

var text = 'много много текстов ...';
var str = text.slice(0,100); //например макс 100 символов
var a = str.split(' ');
a.splice(a.length-1,1);
str = a.join(' ');
alert(str+' ...');

// в итоге получаете текст где количество символов меньше 100