Плагин jQuery "readmore", обрезать текст без сокращения слов - PullRequest
4 голосов
/ 30 апреля 2011

Я использую http://rockycode.com/blog/jquery-plugin-readmore/ для обрезки длинного текста и добавляю ссылку "Подробнее", чтобы раскрыть весь текст.

Я бы хотел избежать сокращения слов, как я мог это сделать?

Если ограничение составляет 35, не сокращайте ш ...

но

Если предел 35, не вырезайте слово ... (и в этом случае обрежьте его до 38, а затем покажите скрытый текст с 39-го до конца.

Ответы [ 3 ]

7 голосов
/ 30 апреля 2011

Вместо этого:

$elem.readmore({
  substr_len: 35
});

Вы могли бы сделать это

$elem.readmore({
  substr_len: $elem.text().substr(0, 35).lastIndexOf(" ")
});

Что мы делаем, чтобы перейти к последнему доступному месту перед индексом 35. Конечно, 35 может быть переменной. Также вы можете поместить его в функцию для повторного использования.

Надеюсь, это поможет

3 голосов
/ 30 апреля 2011

Вы можете изменить функцию abridge в этом плагине следующим образом:

function abridge(elem) {
  var opts = elem.data("opts");
  var txt = elem.html();
  var len = opts.substr_len;
  var dots = "<span>" + opts.ellipses + "</span>";
  var charAtLen = txt.substr(len, 1);
  while (len < txt.length && !/\s/.test(charAtLen)) {
      len++;
      charAtLen = txt.substr(len, 1);
  }
  var shown = txt.substring(0, len) + dots;
  var hidden = '<span class="hidden" style="display:none;">' + txt.substring(len, txt.length) + '</span>';
  elem.html(shown + hidden);
}

... и он будет вести себя так, как вы хотите. Возможно, вы захотите добавить опцию для включения и выключения этой функции, но я оставлю это на ваше усмотрение.

См. Рабочий пример & # x2192;

1 голос
/ 26 апреля 2012

Я только собирал информацию на эту тему, с вашей помощью и с помощью других связанных постов я написал это:

http://jsfiddle.net/KHd6J/526/

...