链接脚本的jQuery文本?

时间:2008-10-29 16:29:15

标签: javascript jquery html anchor

有没有人知道一个脚本可以选择对URL的所有文本引用,并自动用指向这些位置的锚标签替换它们?

For example:

http://www.google.com 

would automatically turn into

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

注意:我想要这个,因为我不想浏览我的所有内容并用锚标记包装它们。

7 个答案:

答案 0 :(得分:57)

注意:此脚本的更新和更正版本现已在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
  • ...所有上述内容都包含在尖括号中(例如< ... >

享受: - )

答案 1 :(得分:14)

JQuery不会在这里帮助你很多,因为你并不真正关心DOM遍历/操作(除了创建锚标记)。如果您的所有网址都在&lt; p class =“url”&gt;然后也许标签。

一个vanilla JavaScript解决方案可能就是你想要的,而命运也是如此,this guy should have you covered

答案 2 :(得分:5)

我有这个功能我打电话

textToLinks: function(text) {

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

答案 3 :(得分:4)

我建议您在渲染到浏览器之前在静态页面上执行此操作,否则您将把转化计算的负担推给可怜的访问者。 :)这是你可以在Ruby中做的(从stdin读取,写入stdout):

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

显然,你会想到如何使它像你想要的那样健壮。以上要求所有URL都以http开头,并且将检查不转换引号中的URL(即可能已经在&lt; a href =“...”&gt;内)。它不会捕获ftp://,mailto:。它会愉快地转换像&lt; script&gt;这样的地方的材料。身体,你可能不想发生。

最令人满意的解决方案是与编辑手动进行转换,这样您就可以进行眼球并批准所有替换。 A good editor将允许您使用组引用(也称为后引用)进行regexp替换,因此它不应该是一个大问题。

答案 4 :(得分:2)

看看这个JQuery插件:https://code.google.com/p/jquery-linkifier/

答案 5 :(得分:1)

有时候做这个服务器端不是一个选择。想想客户端的Twitter小部件(使用jsonp直接转到Twitter API),你想要动态地链接推文中的所有网址......

答案 6 :(得分:0)

如果你想从另一个角度看解决方案...如果你可以通过php和HTML Purifier运行页面,它可以自动生成输出并链接任何网址。