Вопрос

На этот вопрос уже есть ответ здесь:

Кто-нибудь знает о скрипте, который может выбирать все текстовые ссылки на URL-адреса и автоматически заменять их тегами привязки, указывающими на эти местоположения?

For example:

http://www.google.com 

would automatically turn into

<a href="http://www.google.com">http://www.google.com</a>

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

Это было полезно?

Решение

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

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

Другие советы

ПРИМЕЧАНИЕ: Обновленная и исправленная версия этого скрипта теперь доступна по адресу 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:me@example.com
  • ftp://www.server.com/path
  • ...все вышеперечисленное заключено в угловые скобки (т.е. <...>)

Наслаждайтесь :-)

У меня есть эта функция, которую я вызываю

textToLinks: function(text) {

    var re = /(https?:\/\/(([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?))/g;
    return text.replace(re, "<a href=\"$1\" title=\"\">$1</a>");
  }

Я предлагаю вам сделать это на ваших статических страницах перед рендерингом в браузере, иначе вы переложите бремя вычисления конверсии на плечи ваших бедных посетителей.:) Вот как вы могли бы сделать это в Ruby (чтение из stdin, запись в стандартный вывод):

while line = gets
  puts line.gsub( /(^|[^"'])(http\S+)/, "\\1<a href='\\2'>\\2</a>" )
end

Очевидно, вам захочется подумать о том, как сделать это настолько надежным, насколько вы пожелаете.Приведенное выше требование требует, чтобы все URL-адреса начинались с http, и будет проверяться, чтобы не преобразовывать URL-адреса, заключенные в кавычки (т.е.который, возможно, уже находится внутри <a href="...">).Он не будет перехватывать ftp://, mailto:.Он с радостью преобразует материал в таких местах, как <script> bodies, which you may not want to happen.

Наиболее удовлетворительным решением на самом деле является выполнение преобразования вручную с помощью вашего редактора, чтобы вы могли просмотреть и одобрить все замены. Хороший редактор позволит вам выполнять замену регулярных выражений ссылками на группы (они же обратные ссылки), так что это не должно иметь большого значения.

Взгляните на этот плагин jQuery: https://code.google.com/p/jquery-linkifier/

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top