Javascript 如何使用jquery查找文本中的链接?
假设我有这样一个文本 “这是一个长文本。包含150个字符。您可以在此链接上找到有关此文本的更多信息。” 所以在上面的文本中,我想找到那个链接,并将它转换成一个链接,这样当用户点击它时,用户将直接被带到这个网站Javascript 如何使用jquery查找文本中的链接?,javascript,jquery,html,hyperlink,Javascript,Jquery,Html,Hyperlink,假设我有这样一个文本 “这是一个长文本。包含150个字符。您可以在此链接上找到有关此文本的更多信息。” 所以在上面的文本中,我想找到那个链接,并将它转换成一个链接,这样当用户点击它时,用户将直接被带到这个网站 如何实现这一目标?在jquery中,您可以使用选择器中的标记来获取页面的所有链接$(“a”) 因此,如果你想对页面上的每个链接做些什么,你可以使用 $("a").each(function() { //your code here. you can access the link
如何实现这一目标?在jquery中,您可以使用选择器中的标记来获取页面的所有链接<代码>$(“a”) 因此,如果你想对页面上的每个链接做些什么,你可以使用
$("a").each(function() {
//your code here. you can access the link by using $(this)
});
在jquery中,您可以使用选择器中的标记来获取页面的所有链接<代码>$(“a”) 因此,如果你想对页面上的每个链接做些什么,你可以使用
$("a").each(function() {
//your code here. you can access the link by using $(this)
});
我怀疑我可以在这方面做得更好,尽管目前这是我能提供的最好的(尽管我认为某种替代可能更有效):
var$words=$('p').text().split(“”);
for(大写美元){
if($words[i].indexOf('http://')==0){
$words[i]='';
}
}
$('p').html($words.join(“”));
上面的一个稍微改进的版本(但天哪,它很丑陋…):
var标点符号=['!'、“'、”、“、”、“、”、”、”;
$('p')。每个(
函数(){
$words=$(this.text().split(“”);
for(大写美元){
if($.inArray($words[i].charAt(0),标点)>-1&&$words[i].indexOf('http://')==1){
警惕($words[i]);
}
如果($.inArray($words[i].charAt($words[i].length-1),标点符号)>-1&($words[i].indexOf('http://'))==1 | |$words[i].indexOf('http://')==0)){
$words[i]=''+$words[i].charAt($words[i].length-1);
}
else if($words[i].indexOf('http://')==0){
$words[i]='';
}
}
$(this.html($words.join(“”));
});
不过,我不太确定如何处理引用的链接(如
之类的文本)http://google.com“
,例如);老实说,我认为正则表达式可能是解决这个问题的更好的方法。我怀疑我可以在这方面做很多改进,尽管目前这是我能提供的最好方法(尽管我认为某种替代可能更有效):
var$words=$('p').text().split(“”);
for(大写美元){
if($words[i].indexOf('http://')==0){
$words[i]='';
}
}
$('p').html($words.join(“”));
上面的一个稍微改进的版本(但天哪,它很丑陋…):
var标点符号=['!'、“'、”、“、”、“、”、”、”;
$('p')。每个(
函数(){
$words=$(this.text().split(“”);
for(大写美元){
if($.inArray($words[i].charAt(0),标点)>-1&&$words[i].indexOf('http://')==1){
警惕($words[i]);
}
如果($.inArray($words[i].charAt($words[i].length-1),标点符号)>-1&($words[i].indexOf('http://'))==1 | |$words[i].indexOf('http://')==0)){
$words[i]=''+$words[i].charAt($words[i].length-1);
}
else if($words[i].indexOf('http://')==0){
$words[i]='';
}
}
$(this.html($words.join(“”));
});
不过,我不太确定如何处理引用的链接(如
之类的文本)http://google.com“
,例如);老实说,我认为正则表达式可能是解决这个问题的更好的方法。使用正则表达式
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>');
}
var e=/http:\/\/([A-Za-z0-9\.-\.-\]{2,}\)+[A-Za-z]{2,}(\/.+)/,
s=“这是一个长文本,包含150个字符。您可以在此链接上找到有关此文本的更多信息http://www.somewebsite.com/RDFCCSDVDS";
如果(s.match(e)){
var url=RegExp['$&'];
s=s.replace(url“”);
}
使用正则表达式
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>');
}
var e=/http:\/\/([A-Za-z0-9\.-\.-\]{2,}\)+[A-Za-z]{2,}(\/.+)/,
s=“这是一个长文本,包含150个字符。您可以在此链接上找到有关此文本的更多信息http://www.somewebsite.com/RDFCCSDVDS";
如果(s.match(e)){
var url=RegExp['$&'];
s=s.replace(url“”);
}
使用正则表达式:
$('p').html(function(i, text) {
return text.replace(
/\bhttp:\/\/([\w\.-]+\.)+[a-z]{2,}\/.+\b/gi,
'<a href="$&">$&</a>'
);
});
$('p').html(函数(i,文本){
返回text.replace(
/\bhttp:\/\/([\w\.-]+\.)+[a-z]{2,}\/.+\b/gi,
''
);
});
使用正则表达式:
$('p').html(function(i, text) {
return text.replace(
/\bhttp:\/\/([\w\.-]+\.)+[a-z]{2,}\/.+\b/gi,
'<a href="$&">$&</a>'
);
});
$('p').html(函数(i,文本){
返回text.replace(
/\bhttp:\/\/([\w\.-]+\.)+[a-z]{2,}\/.+\b/gi,
''
);
});
@Eric的解决方案非常出色,但我发现如果url后面有空格,则可能是错误的。请使用以下文本尝试他的JSFIDLE示例:
<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>
这是一个长文本。它包含150个字符。您可以在此链接上找到有关此文本的更多信息http://api.som-ewebsite.com/RDFCCS-VDS/#!/?p1=foo和p2=bar就在这里
因此,我修改了正则表达式的最新部分,截取了几乎所有URL友好字符,不包括空格,空格对我来说是URL“终止符”(在现实世界中,当然不是,但我找不到在纯文本中分离普通空格和属于URL的空格的方法)
$('p').html(函数(i,文本){
返回text.replace(
/\必和必拓:\/\/([\w\.-]+\)+[a-z]{2,}([\/\w\.-\\\\\\?\=\!\,\&;]+)/gi,
''
);
});
我认为可以改进,欢迎一如既往地提出建议:)
编辑:
无论如何,我认为这是最好的解决方案:@Eric的解决方案非常出色,但我发现如果url后面有空格,这可能是错误的。使用如下文本尝试他的JSFIDLE示例:
<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>
这是一篇很长的文本。它包含150个字符。您可以在此链接上找到有关此文本的更多信息http://api.som-ewebsite.com/RDFCCS-VDS/#!/?p1=foo&p2=bar就在这里?