【问题标题】:How to add an anchor tag to a URL in a String如何将锚标记添加到字符串中的 URL
【发布时间】:2014-02-18 15:04:05
【问题描述】:

我有一些包含 youtube 链接(字符串中的长度和位置不同,并非每个字符串都包含 URL)和文本的字符串。这些字符串将被写入段落标签,但我希望 URL 是可点击的,所以我需要 URL 周围的锚标签。

我设法找到了访问包含链接的段落的方法:

if($("#facebookFeed p:contains('http')").length){
    //do stuff
}

我被困在这里,不确定这是否是正确的方法。

【问题讨论】:

  • 对于初学者来说,没有完美的 URL 正则表达式,但您可以插入一个“相当不错”的表达式,它可以更可靠地选择 URL
  • @darkpbj 说到“完美的 URL 正则表达式”,我喜欢使用这个 - mathiasbynens.be/demo/url-regex

标签: jquery string anchor


【解决方案1】:

您必须使用正则表达式来匹配字符串中的 URL,然后将它们包装在锚中:

$('p:contains("http://")').html(function(index, html) {
    var url = html.match(/(((ftp|https?):\/\/)[\-\w@:%_\+.~#?,&\/\/=]+)|((mailto:)?[_.\w-]+@([\w][\w\-]+\.)+[a-zA-Z]{2,3})/g);

    $.each(url, function(i, v) {
        html = html.replace(v, '<a href="' + v + '">' + v + '</a>');        
    });

    return html;
});

上面的例子使用了this answer中的正则表达式模式

Here's a fiddle

【讨论】:

  • 出于好奇,你为什么要测试ftp?我不认为锚对他们有用。
  • @admdrew 我使用了在另一个答案中找到的正则表达式模式(我知道很懒),我只是想演示如何用锚替换匹配项。
  • 请编辑 'var url = html.match(/(((ftp|https?):\/\/)[\-\w@:%_\+.~#? ,&\/\/=]+)|((mailto:)?[_.\w-]+@([\w][\w\-]+\.)+[a-zA-Z]{ 2,3})/g) || []' 所以 url 永远不会为空,而是一个空白数组。每当 html var 不包含任何有效的 url 时,就会弹出一个错误。
【解决方案2】:

下面会做

$("#facebookFeed p:contains('http')").each(function() {
    $(this).wrapInner('<a href="' + $(this).text() + '"/>');
});

如下所示:http://jsfiddle.net/uyHQ2/

当然,这假定了某种 HTML 布局。 如果您的不同,请发布 HTML 示例。

【讨论】:

  • 这是正确的答案,我希望 OP 能解决这个问题。
  • 整个字符串被写入段落。我的字符串如下所示:“randomtext youtube.com... randomtext”。所以 Martijns 函数创建:&lt;a&gt;randomtext http://www.youtube.com/... randomtext&lt;/a&gt;。我需要的是:randomtext &lt;a&gt;http://www.youtube.com/...&lt;/a&gt; randomtext
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 2020-07-22
相关资源
最近更新 更多