假设我有这样的文字 “这是一个很长的文字。它包含150个字符。您可以在此链接上找到有关此文字的更多信息http://www.somewebsite.com/RDFCCSDVDS”。
因此,在上面的文字中,我想找到该链接并将其转换为链接,以便当用户点击它时,用户将直接进入该网站。
我如何实现这一目标?
答案 0 :(得分:6)
使用正则表达式:
$('p').html(function(i, text) {
return text.replace(
/\bhttp:\/\/([\w\.-]+\.)+[a-z]{2,}\/.+\b/gi,
'<a href="$&">$&</a>'
);
});
答案 1 :(得分:3)
我怀疑我可以在很大程度上改进这一点,尽管在这一点上这是我能提供的最好的(尽管我认为某种替换可能更有效):
var $words = $('p').text().split(' ');
for (i in $words) {
if ($words[i].indexOf('http://') == 0) {
$words[i] = '<a href="' + $words[i] + '">' + $words[i] + '</a>';
}
}
$('p').html($words.join(' '));
上面的一个略微改进的版本(但是好主,它很丑......):
var punctuation = ['!',"'",'"',',','.'];
$('p').each(
function(){
$words = $(this).text().split(' ');
for (i in $words){
if ($.inArray($words[i].charAt(0),punctuation) > -1 && $words[i].indexOf('http://') == 1){
alert($words[i]);
}
else if ($.inArray($words[i].charAt($words[i].length - 1),punctuation) > -1 && ($words[i].indexOf('http://') == 1 || $words[i].indexOf('http://') == 0)){
$words[i] = '<a href="'+$words[i].substring(0,$words[i].length-1)+'">' + $words[i].substring(0,$words[i].length-1) + '</a>' + $words[i].charAt($words[i].length-1);
}
else if ($words[i].indexOf('http://') == 0){
$words[i] = '<a href="' + $words[i] + '">' + $words[i] + '</a>';
}
}
$(this).html($words.join(' '));
});
我不太确定如何处理引用的链接(例如"http://google.com"
之类的文本);老实说,我认为正则表达式可能是解决这个问题的最好方法。
答案 2 :(得分:1)
@Eric解决方案很棒,但我发现如果url后面有空格可能会出错。试试他的jsfiddle示例,其中包含以下文本:
<p>This is a long text. It contains 150 characters. You can find more about this text on this link http://api.som-ewebsite.com/RDFCCS-VDS/#!/?p1=foo&p2=bar right here</p>
所以我改变了正则表达式的最新部分,几乎拦截了除了空格之外的每个URL友好字符,这对我来说是一个网址“终结者”(在现实世界中它当然不是,但我不能找到一种方法来分离普通空格和属于纯文本中URL的空格。
$('p').html(function(i, text) {
return text.replace(
/\bhttp:\/\/([\w\.-]+\.)+[a-z]{2,}([\/\w\.\-\_\?\=\!\#,\&]+)/gi,
'<a href="$&">$&</a>'
);
});
我认为可以改进,建议一如既往地欢迎:)
编辑:
无论如何,我认为这是最好的解决方案:How to replace plain URLs with links?
答案 3 :(得分:0)
使用正则表达式
var e = /http:\/\/([A-Za-z0-9\.-_]{2,}\.)+[A-Za-z]{2,}(\/.+)/,
s = "This is a long text. It contains 150 characters. You can find more about this text on this link http://www.somewebsite.com/RDFCCSDVDS";
if (s.match(e)) {
var url = RegExp['$&'];
s = s.replace(url, '<a href="' + url + '">' + url + '</a>');
}
答案 4 :(得分:-3)
在jquery中,您可以使用选择器中的标记来获取页面的所有链接,例如.. $("a")
因此,如果您想对页面上的每个链接执行某些操作,则可以使用
$("a").each(function() {
//your code here. you can access the link by using $(this)
});