Читать больше о плагине jQuery, обрезать текст без вырезания слов

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

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

Если предел 35, не сокращайте ж...

но

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


person Santiago    schedule 30.04.2011    source источник


Ответы (3)


Вы можете изменить функцию 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);
}

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

См. рабочий пример →

person mVChr    schedule 30.04.2011
comment
Я не знаю, есть ли более простой способ сделать это, но это работает просто отлично! Спасибо mVCr - person Santiago; 01.05.2011

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

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

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

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

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

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

person Edgar Villegas Alvarado    schedule 30.04.2011

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

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

person user954728    schedule 26.04.2012