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