有没有人知道一个脚本可以选择对URL的所有文本引用,并自动用指向这些位置的锚标签替换它们?
For example:
http://www.google.com
would automatically turn into
<a href="http://www.google.com">http://www.google.com</a>
注意:我想要这个,因为我不想浏览我的所有内容并用锚标记包装它们。
答案 0 :(得分:57)
注意:此脚本的更新和更正版本现已在https://github.com/maranomynet/linkify(GPL / MIT许可证)上提供
嗯......对我而言,这似乎是jQuery的完美任务。
...像这样的事情脱离了我的脑海:
// 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<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运行页面,它可以自动生成输出并链接任何网址。