关于javascript:jQuery文本链接脚本?

jQuery Text to Link Script?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
For example:

http://www.google.com

would automatically turn into

http://www.google.com

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


注:此脚本的更新和更正版本现已在https://github.com/maranomynet/linkify(gpl/mit许可证)上提供。

隐马尔可夫模型。。。对我来说,这似乎是jquery的完美任务。

…我突然想到了这样的事情:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 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, '&lt;')
                         .replace(/>/g, '&gt;')
                         .replace(url1, '$1$2$3')
                         .replace(url2, '$1$2$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
  • …以上全部用尖括号包裹(即<>)

享受:-


jquery在这里不会帮你很多忙,因为你并不真正关心DOM遍历/操作(除了创建锚标记)。如果您的所有URL都在

tags中,那么可能。

一个普通的javascript解决方案可能是你想要的,正如命运所愿,这个人应该让你去解决。


我有这个我调用的函数

1
2
3
4
5
textToLinks: function(text) {

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

我建议您在呈现到浏览器之前在静态页面上执行此操作,否则您将把转换计算的负担推到可怜的访问者身上。:)下面是在Ruby中实现这一点的方法(从stdin读取,向stdout写入):

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

很明显,你会想办法让它像你想要的那样强大。上面要求所有的URL都以HTTP开头,并将选中"不转换引号中的URL"(即,它可能已经位于中)。它不会捕获ftp://,mailto:。它会很高兴地将物质转换到身体这样的地方,你可能不想这样。

最令人满意的解决方案是与您的编辑手工进行转换,这样您就可以目不转睛并批准所有替换。一个好的编辑器将允许您使用组引用(又称回引用)进行regexp替换,因此这不应该是一个大问题。


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


有时做服务器端不是一个选项。想想一个客户端的twitter小部件(它使用jsonp直接进入twitter API),你想动态链接twitter中的所有URL…


如果你想从另一个角度来解决问题…如果您可以通过php和html净化器运行页面,它可以自动格式化输出并链接任何URL。