Подтвердить что ты не робот

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>

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

4b9b3361

Ответ 1

JQuery не поможет вам здесь много, так как вы не очень заинтересованы в обходе/манипулировании DOM (кроме создания тега привязки). Если все ваши URL-адреса были в < p class= "url" > теги, возможно, возможно.

Ванильное JavaScript-решение, вероятно, то, что вы хотите, и, как судьбы, этот парень должен был вас охватить.

Ответ 2

ПРИМЕЧАНИЕ. Обновленная и исправленная версия этого script теперь доступна в https://github.com/maranomynet/linkify ( Лицензия GPL/MIT)


Хм... мне кажется, что это идеальная задача для jQuery.

... что-то вроде этого сошло с ума:

// Define: Linkify plugin
(function($){

  var url1 = /(^|&lt;|\s)(www\..+?\..+?)(\s|&gt;|$)/g,
      url2 = /(^|&lt;|\s)(((https?|ftp):\/\/|mailto:).+?)(\s|&gt;|$)/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, '&amp;')
                         .replace(/</g, '&lt;')
                         .replace(/>/g, '&gt;')
                         .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 ссылками на группы (иначе ссылки), поэтому это не должно быть большой проблемой.

Ответ 6

Выполнение этой серверной стороны иногда не является вариантом. Подумайте о виджетах на стороне клиента (который напрямую связан с API Twitter с помощью jsonp), и вы хотите динамически связывать все URL-адреса в Tweets...

Ответ 7

Если вам нужно решение с другой точки зрения... если вы можете запускать страницы через php и HTML Purifier, он может автоматически форматировать вывод и связывать любые URL-адреса.