JQuery Text to Link Script?
Кто-нибудь знает о script, который может выбрать все текстовые ссылки на URL-адреса и автоматически заменить их на теги привязки, указывающие на эти местоположения?
For example:
http://www.google.com
would automatically turn into
<a href="#" onclick="location.href='http://www.google.com'; return false;">http://www.google.com</a>
Примечание. Я хочу этого, потому что я не хочу проходить весь контент и обертывать их тегами привязки.
Ответы
Ответ 1
JQuery не поможет вам здесь много, так как вы не очень заинтересованы в обходе/манипулировании DOM (кроме создания тега привязки). Если все ваши URL-адреса были в < p class= "url" > теги, возможно, возможно.
Ванильное JavaScript-решение, вероятно, то, что вы хотите, и, как судьбы, этот парень должен был вас охватить.
Ответ 2
ПРИМЕЧАНИЕ. Обновленная и исправленная версия этого script теперь доступна в https://github.com/maranomynet/linkify ( Лицензия GPL/MIT)
Хм... мне кажется, что это идеальная задача для jQuery.
... что-то вроде этого сошло с ума:
// Define: Linkify plugin
(function($){
var url1 = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g,
url2 = /(^|<|\s)(((https?|ftp):\/\/|mailto:).+?)(\s|>|$)/g,
linkifyThis = function () {
var childNodes = this.childNodes,
i = childNodes.length;
while(i--)
{
var n = childNodes[i];
if (n.nodeType == 3) {
var html = $.trim(n.nodeValue);
if (html)
{
html = html.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(url1, '$1<a href="http://$2">$2</a>$3')
.replace(url2, '$1<a href="$2">$2</a>$5');
$(n).after(html).remove();
}
}
else if (n.nodeType == 1 && !/^(a|button|textarea)$/i.test(n.tagName)) {
linkifyThis.call(n);
}
}
};
$.fn.linkify = function () {
return this.each(linkifyThis);
};
})(jQuery);
// Usage example:
jQuery('div.textbody').linkify();
Он пытается превратить все вхождения в ссылки:
-
www.example.com/path
-
http://www.example.com/path
-
mailto:[email protected]
-
ftp://www.server.com/path
- ... все вышеперечисленное, заключенное в угловые скобки (т.е.
<
... >
)
Наслаждайтесь: -)
Ответ 3
У меня есть эта функция, я звоню
textToLinks: function(text) {
var re = /(https?:\/\/(([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?))/g;
return text.replace(re, "<a href=\"$1\" title=\"\">$1</a>");
}
Ответ 4
Я предлагаю вам сделать это на своих статических страницах перед рендерингом в браузер, или вы будете подталкивать нагрузку на вычисления преобразования на ваших бедных посетителей.:) Вот как вы можете это сделать в Ruby (чтение из stdin, запись в stdout):
while line = gets
puts line.gsub( /(^|[^"'])(http\S+)/, "\\1<a href='\\2'>\\2</a>" )
end
Очевидно, вам захочется подумать о том, как сделать это надежным, как вам хочется. Вышеизложенное требует, чтобы все URL-адреса начинались с http, и будет проверять, не конвертировать URL-адреса, которые находятся в кавычках (то есть уже может быть внутри < a href= "..." > ). Он не поймает ftp://, mailto:. Он будет счастливо преобразовывать материал в такие места, как <script> тела, которые вы, возможно, не захотите.
Самое удовлетворительное решение - действительно сделать конверсию вручную с вашим редактором, чтобы вы могли наблюдать и одобрять все подстановки. Хороший редактор позволит вам делать замену regexp ссылками на группы (иначе ссылки), поэтому это не должно быть большой проблемой.
Ответ 5
Взгляните на этот плагин JQuery: https://code.google.com/p/jquery-linkifier/
Ответ 6
Выполнение этой серверной стороны иногда не является вариантом. Подумайте о виджетах на стороне клиента (который напрямую связан с API Twitter с помощью jsonp), и вы хотите динамически связывать все URL-адреса в Tweets...
Ответ 7
Если вам нужно решение с другой точки зрения... если вы можете запускать страницы через php и HTML Purifier, он может автоматически форматировать вывод и связывать любые URL-адреса.