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, '<') .replace(/>/g, '>') .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。