Как усечь url-адрес при использовании плагина jQuery Linkify?
Https://github.com/maranomynet/linkify
Я использую этот плагин. Это работает, и все в порядке. Но есть ли вариант, который я могу подключить к нему так, что если длина url-адреса больше, чем "X", то усеките его и добавьте "...- что?
Прямо сейчас URL-адреса такие длинные.
Я заметил, что в демо есть функция обратного вызова "handleLinks", но как я могу ее использовать?
2 ответа:
Вы правы, вы можете использовать функцию обратного вызова
handleLinks
. Например, я написал простой функционал, который вам нужен:handleLinks: function (links) { for (var i = 0, cnt = links.length, tmpLink; i < cnt; i++) { tmpLink = links[i].innerHTML; if (tmpLink.length > 10) { links[i].innerHTML = tmpLink.substr(0, 10) + '...'; } } }
Он усекает ссылки, если они длиннее 10 символов. Вы можете изменить этот сценарий в соответствии с вашими потребностями.
Для усечения URL я выбираю сокращение в середине, так как домен и файл обычно более важны, чем путь к каталогу.
Взято и адаптировано для этого вопроса из моегоGitHub fork библиотеки JavaScript Эндрю ПламмераSugar .
String.prototype.shorten = function(length, position, countSplitter, splitter) { if (this.length < 1 && length < 1) return String(this); if (!(typeof(splitter) === 'string')) splitter = '...'; if (!(typeof(countSplitter) === 'boolean')) countSplitter = true; var balance = (countSplitter) ? splitter.length : 0; if (length <= balance || this.length <= length) return String(this); // Perform shortening var shortened, beforeSplitter, afterSplitter; if (position == 'left') { afterSplitter = this.substring(this.length - length + balance, this.length - 1); shortened = splitter + afterSplitter; } else if (position == 'right') { beforeSplitter = this.substring(0, length - balance); shortened = beforeSplitter + splitter; } else { beforeSplitter = this.substring(0, Math.ceil((length / 2) - (balance / 2))); afterSplitter = this.substring(this.length - Math.floor((length / 2) - (balance / 2)), this.length); shortened = beforeSplitter + splitter + afterSplitter; } return shortened; }
Пример сокращения Url-адреса таким образом, что результирующая строка имеет длину 20 символов:
var toShorten = 'http://stackoverflow.com/questions/9156458/when-using-jquery-linkify-plugin-how-do-i-truncate-the-url'; var shortened = toShorten.shorten(20); // Output: 'http://st...-the-url'
Примечание: этот код был только корректно прочитан и не прошел модульное тестирование. Реализация сахара была юнит-тест , однако.