2012-08-09 37 views
4

我通过getJSON拉动推文并将它们写入Google地图infowindow与JavaScript。问题是,这些推文带有文本链接,但没有格式(没有ID /类/任何缩小查找和替换的范围)。这是我现在使用查找文本代码捣成泥,但我不能把它包裹不管它发现在<a>标签正确显示的链接:用jQuery包装<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); 

难道我忽略的东西或有谁知道更好的方法来做到这一点?

+0

如果你不想使用jQuery这个工作得很好:https://gist.github.com/ryansmith94/0fb9f6042c1e0af0d74f – 2017-10-10 19:28:24

回答

3

如果我理解你的问题的权利,这应该工作。 不确定为什么你要迭代元素,因为正则表达式会扫描所有文本。

<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> 
+0

这绝对是我一直在寻找的,但问题是它是全球性的。我可以解决这个问题,但它仍然会尝试在头部中封装URL(就像那些引用gMaps API的URL一样)。这是否有一个原因,尽管它应该只是看着“身体”? (将其更改为文档也无济于事)。 – 2012-08-09 16:23:27

+0

我更新了这个例子,这工作正常,没有弄乱头部的网址 – Valdis 2012-08-09 16:37:37

+0

就像后续,这是我最终成功使用的: 'function urlwrap(str){return'' + str + ''; }; var text ='data [i] .text.replace(/ \ bhttp [^] +/ig,urlwrap)'' 并且文本var被写入到信息页面 - [i] - 从JSON响应。 – 2012-09-04 17:02:47