通过jQuery查找和替换,将文本URL包装在<a>标签中

5

我正在通过getJSON拉取推文,并使用JavaScript将它们写入Google地图信息窗口。问题是,这些推文带有文本链接但没有格式(也没有id / class / 任何可用于缩小查找范围的内容)。这是我目前使用的代码混搭,用于查找文本,但我无法使其在<a>标记中包装它找到的任何内容以正确显示链接:

function wrap( str ) {
    return '<a href="' + str + '">' + str + '<\/a>';
};

function replaceText() {
    var jthis = $(this);
    $("*").each(function () {
        if (jthis.children().length == 0) {
            jthis.text(jthis.text().replace(/\bhttp[^ ]+/i, wrap));
        }
    });
}
$(document).ready(replaceText);
$("html").ajaxStop(replaceText);

我是否忽略了什么,或者有没有更好的方法来做这件事?


如果您不想使用jQuery,这个代码可以很好地工作:https://gist.github.com/ryansmith94/0fb9f6042c1e0af0d74f - Chad Hedgcock
1个回答

6
如果我理解您的问题正确,那么这应该有效。不确定为什么要遍历元素,因为正则表达式会扫描所有文本。
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
        <script>
        function wrap( str ) {
            return '<a href="' + str + '">' + str + '<\/a>';
        };
        function replaceText() {
            $(".tweet").each( function(){
              $(this).html($(this).html().replace(/\bhttp[^ ]+/ig, wrap));
            })

        }
        $(document).ready(replaceText);
        </script>
    </head>
    <body>
        <div class="tweet"> test 1 http://example.com/path </div>
        <div class="tweet"> test 2 http://example.com/path </div>
    </body>
</html>

这绝对是我在寻找的,但问题是它是全局的。我可以把它拿出来,但它仍然试图在头部包装URL(比如引用gMaps API的URL)。即使它只应该在“body”中查找,但这是有原因的吗?(将其更改为文档也没有帮助)。 - Matt Riva
我更新了示例,这样做可以正常工作,而不会弄乱头部的URL。 - Valdis
作为跟进,这是我最终成功使用的代码:function urlwrap( str ) { return '<a href="' + str + '" target="_blank">' + str + '</a>'; }; var text= 'data[i].text.replace(/\bhttp[^ ]+/ig, urlwrap)'并且文本变量被写入页面,其中包含从JSON响应解析出来的信息--[i]。 - Matt Riva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接