javascript 字串自動添加 URL/EMAIL 連結 By shawl.qiu

來源:互聯網
上載者:User
javascript 字串自動添加 URL/EMAIL 連結 By shawl.qiu

 說明:
 其實關於自動附加 URL/EMAIL 連結我至少寫了不少於十個這樣功能的代碼了.
 直到最近學JS小成, 弄了一個比較完美的DOM解決方案, 倒是可以無誤附加連結.
 但是問題總是會出現的, 雖然用DOM方法可以無誤附加連結, 但是卻把縮排格式給丟了....
 這個是致命的, 所以就重寫了一個不會丟失縮排的囉.
 這個是直接進行字串處理的, 應該有可能發生錯誤, 但是出錯率會相當低.
 
 目錄:
 1. DOM 附加 URL/EMAIL 連結
 2. 字串附加 URL/EMAIL 連結
 
 shawl.qiu
 2006-12-13
 http://blog.csdn.net/btbtd
 
 1. DOM 附加 URL/EMAIL 連結

 
  1. <script type="text/javascript">
  2. //<![CDATA[
  3. onload=function(){
  4. var o_=document;
  5. fDomAtcLink(o_.body, o_);
  6. }
  7. //sqMethod.attachlink(o_.body, o_)
  8. function fDomAtcLink(obj, dcu){
  9. var temp, str='', span;
  10. for(var i=0, j=obj.childNodes.length; i<j; i++){
  11. temp=obj.childNodes[i];
  12. if(temp.nodeType==3){
  13. if(temp.parentNode.nodeName=='A')return false;
  14. if(temp.data.indexOf('http')<0&&temp.data.indexOf('ftp')<0&&
  15. temp.data.indexOf('@')<0)continue;
  16. span=dcu.createElement('span');
  17. str=temp.data.replace(//&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  18. //str=sqMethod.encode(temp.data);
  19. str=str.replace(/(ht|f)tp(s|)/:////[/-/w.:]+(//[^ /n/r/'/"]+|)/gi,function(match){
  20. return '<a href="'+match+'" class="sqUrl">'+match+'</a>'; } );
  21. str=str.replace(/[/w.]+@[/w/-.]+(//[^ /n/r/'/"]+|)/gi,function(match){
  22. return '<a href="mailto:'+match+'" class="sqMail">'+match+'</a>'; } );
  23. span.innerHTML=str;
  24. obj.replaceChild(span, temp);
  25. }
  26. if(temp.nodeType==1)arguments.callee(obj.childNodes[i], dcu);
  27. } temp=span=null; // shawl.qiu script
  28. }
  29. //]]>
  30. </script>

 2. 字串附加 URL/EMAIL 連結

 
  1. <script type="text/javascript">
  2. //<![CDATA[
  3. onload=function(){
  4. var html=document.body.innerHTML;
  5. document.body.innerHTML=fPadUrl(document.body.innerHTML);
  6. document.body.innerHTML=fPadEmail(document.body.innerHTML);
  7. }
  8. function fPadUrl(str){
  9. if(!str||str.replace(//s+/,'').length<0)return false;
  10. var re=new RegExp('([//s//S]|)((ht|f)t(p|ps)/:////.*?)(//s|/&nbsp/;|/&gt/;|/&lt/;|'+
  11. '[/'/"<>]|/&/#34/;)','gi');
  12. return str.replace(re,
  13. function($1,$2,$3,$4,$5,$6){
  14. if(//'|/"|/=|/= /.test($2))return $1;
  15. $3='<a href="'+$3+'" class="sqLink">'+$3+'</a>';
  16. return $2+$3+$6;
  17. }
  18. ); // shawl.qiu script
  19. }
  20. function fPadEmail(str){
  21. if(!str||str.replace(//s+/,'').length<0)return false;
  22. var re=new RegExp('(mailto/:|/>|)([//w/./-]+)/@(.*?)'+
  23. '(//s|/&nbsp/;|/&gt/;|/&lt/;|[/'/"<>]|/&/#34/;)','gi');
  24. return str.replace(re,
  25. function($1,$2,$3,$4,$5){
  26. if(/mailto|>/.test($2))return $1;
  27. $3='<a href="mailto:'+$3+'@'+$4+'" class="sqLink">'+$3+'@'+$4+'</a>';
  28. return $2+$3+$5;
  29. }
  30. ); // shawl.qiu script
  31. }
  32. //]]>
  33. </script>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.