substr_len с HTML, показать первые X символов и ссылку «Подробнее» (плагин jquery.readmore)

#jquery #count #substring

#jquery #подсчитайте #подстрока

Вопрос:

Я использую плагин для отображения только первых 500 символов текста… Но это не работает с некоторыми HTML, я не могу воспроизвести это, но я думаю, что это могло бы быть с <img> тегом, или <blockquote> или, может быть, <ul> / <ol>

Он просто показывает весь текст И ссылку «Посмотреть больше»…

Есть идея?

Это код

 (function ($) {
$.fn.readmore = function (settings) {

$('.home_excerpt').removeClass('home_excerpt');

var opts =  $.extend({}, $.fn.readmore.defaults, settings);

this.each(function () {
  $(this).data("opts", opts);
  if ($(this).html().length > opts.substr_len) {
    abridge($(this));
    linkage($(this));
  }
});

function linkage(elem) {
  elem.append(elem.data("opts").more_link);
  $(".text_seemore").click( function () {
    $(this).hide();
    $(this).siblings("span:not(.hidden)").hide().siblings("span.hidden").show();
    return false;
  });
}

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 amp;amp; !/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);
}

return this;
};

$.fn.readmore.defaults = {
substr_len: 500,
ellipses: 'amp;#8230;',
more_link: '<br /><a href="#" class="text_seemore">Seeamp;nbsp;More</a>'
};

 })(jQuery);
  

Ответ №1:

Похоже, что в вашей abridge() функции вы пытаетесь избежать сокращения слова пополам, если я правильно читаю ваш код. Проблема в том, что если после желаемой длины нет пробелов, вы просто вернете все это целиком, но впоследствии вы не проверяете, так ли это. Это означает, что вы вернете полный текст И добавите ссылку more.

При обработке HTML описанное выше является обычным случаем, если у вас есть строки из одного слова, таблицы с ячейками из одного слова и т.д., Или если вы используете amp;nbsp; в качестве пробела.

Большая проблема заключается в том, что вы сокращаете HTML как строку, что почти наверняка приведет к нарушению разметки. Вы можете легко разрезать теги пополам, удалить закрывающие теги элементов блока и так далее. Посмотрите, можете ли вы использовать elem.text() для обработки этого как чистой строки, или, если вы хотите сохранить форматирование, посмотрите, можете ли вы извлечь первый абзац или что-то подобное.

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

Комментарии:

1. Как вы думаете, я мог бы найти плагин для закрытия удаленных тегов? Это было бы лучшим решением для того, что я ищу…