Текст jQuery для связывания скрипта?

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

For example:

http://www.google.com 

would automatically turn into

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

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

Является ли javascript единственной доступной для вас средой или у вас есть серверная часть, например php?

DGM 29.10.2008 19:44

Я создал библиотеку, которую вы, возможно, захотите рассмотреть: ali-saleem.github.io/anchorme.js он очень маленький по размеру, очень эффективен, очень чувствителен, дает наименьшее количество ложных срабатываний, поддерживает все TLD, поддерживает IP, FTP. , HTTP или даже без http, пропускает HTML без регулярного выражения, и это в 3 раза быстрее, чем связывание и автолинковка.

Alex C. 16.07.2015 22:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
40
2
41 671
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

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

Я не согласен, решение этой проблемы включает в себя много обхода DOM (возможно, не много селекторов CSS), и jQuery - прекрасный инструмент для решения этой проблемы. (См. Мой пример черновика плагина jQuery ниже.)

Már Örlygsson 30.10.2008 03:27

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

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

Очевидно, вы захотите подумать о том, как сделать это настолько надежным, насколько вы хотите. Вышеупомянутое требует, чтобы все URL-адреса начинались с http, и будет проверяться, не преобразовывать ли URL-адреса в кавычках (т.е. которые могут уже находиться внутри <a href="...">). Он не будет ловить ftp: //, mailto :. Он с радостью преобразует материал в такие места, как тела <script>, чего вы, возможно, не захотите.

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

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

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

Наслаждаться :-)

Незначительная синтаксическая ошибка: while (i--) {// обратите внимание на лишнюю скобку Спасибо! Этот плагин был именно тем, что я искал.

Will Moffat 22.04.2009 18:56

Исправлена ​​ошибка, спасибо!

Már Örlygsson 27.04.2009 13:21

Кстати, обновленная и исправленная версия этого скрипта теперь доступна (GPL / MIT) по адресу github.com/maranomynet/linkify

Már Örlygsson 28.04.2010 03:17

прохладно!. некоторые идеи, установите целевое значение attr в параметрах и прикрепите jquery из google cdn вместо локальной копии. очень-очень полезный кусок js.

panchicore 19.02.2011 01:13

У меня были проблемы с проектом на GitHub в IE 7 и IE 8. Поэтому я отправил запрос на перенос с новым регулярным выражением. Спасибо.

John Bubriski 07.06.2011 22:05

Ух ты! Спасибо тебе большое за это! Я сделал небольшой jsFiddle из этого, если кто-то хочет увидеть его предварительный просмотр: jsfiddle.net/NathanJohnson/gRLaV

Nathan 29.10.2011 06:57

К сожалению, это не работает в Chrome (v27).

syntagma 04.05.2013 16:41

@ MárÖrlygsson: вы все еще поддерживаете эту библиотеку? Хотелось бы включить его в моя сводка новостей - см. билет на GitHub.

Dan Dascalescu 21.02.2014 16:36

не совсем. не на данный момент по крайней мере

Már Örlygsson 19.05.2014 18:05

Не все варианты использования работают ... jsfiddle.net/npnrm8dq

SexyMF 22.06.2015 22:10

Спасибо за этот полезный источник. Отлично работает для моего проекта.

Sedat Kumcu 11.04.2017 18:41

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

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

Этот плагин очень наивен. В нем не упоминается предшествующий уровень техники, хотя есть тонны библиотек для разбора и проверки URL-адресов.

Dan Dascalescu 21.02.2014 16:31

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

textToLinks: function(text) {

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

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