2010-08-24 58 views
0

我想一個正則表達式將與...取代長的URL,例如更換一定長度的網址,JavaScript的正則表達式與

我通過與它的URL字符串,即

<a href="http://www.abc.com/thisSite/myPages/blah-blah-blah.aspx">http://www.abc.com/thisSite/myPages/blah-blah-blah.aspx</a> 

應轉換爲

<a href="http://www.abc.com/thisSite/myPages/blah-blah-blah.aspx">http://www.abc.com/th....</a> 

任何幫助將appriciated。

+0

您可以通過縮進4個空格將HTML作爲文本發佈,從而使其成爲「代碼」或「預格式化」。在迷你編輯器中還有一個按鈕,用於縮進選定的4行空格(標有1010101的那一行) – 2010-08-24 03:12:44

+0

非常感謝您的幫助... :) – alittlebitofday 2010-08-24 03:20:07

+0

您是否使用任何庫(ig JQuery等) )?您是否從服務器腳本(例如PHP)生成HTML?如果這是從服務腳本本身解決的話,最好不要,除非你從Ajax調用中獲取URL,因此庫... – 2010-08-24 03:23:59

回答

1

jQuery的

$('a').each(function(){ 
    var text = $(this).text(); 
    if (text.length > 20 && text.substr(0,7) == "http://"){ // it looks like a URL and it's long 
     text = text.substr(0,20) + '&hellip;'; 
     $(this).text(text); 
    } 

}); 

普通的JavaScript

var links = document.getElementsByTagName('a'); 
for (var i = 0;i=links.length-1;i++) { 
    var text = links[i].innerHTML; 
    if (text.length > 20 && text.substr(0,7) == "http://"){ // it looks like a URL and it's long 
     text = text.substr(0,20) + '&hellip;'; 
     links[i].innerHTML = text; 
    } 
} 

我不知道,如果這個工程或不是我寫的,從我的頭上。 玩得開心。

+0

fyi:'as'是一個保留字,你需要改變它 – 2010-08-24 03:54:40

0

你需要使用的代碼

<script> 
var cutOffAt = 20; 
var anchorRef = getAnchorFromDom(); 
var text = anchorRef.innerHtml; 
if(text.length > 20) { 
    anchorRef.innerHtml = text.substr(0, cutOffAt); 
} 

function getAnchorFromDom() 
{ 
    // provide your own logic here 
    return document.getElementsByTagName('a')[0]; 
} 
</script> 

未測試以下位。

1

基於this solution,這裏是你能做什麼:

String.prototype.trunc = 
    function(n,useWordBoundary,wordChar){ 
     if (!wordChar) wordChar = ' '; 
     var toLong = this.length>n, 
      s_ = toLong ? this.substr(0,n-1) : this; 
     s_ = useWordBoundary && toLong ? s_.substr(0,s_.lastIndexOf(wordChar)) : s_; 
     return toLong ? s_ + '&hellip;' : s_; 
    }; 

然後簡單地套用這錨顯示鏈接:

var maxLength = 40; 
var aElements = document.getElementsByTagName('a'), _text, _param; 
var aLen = aElements.length; 

for (var i=0; i<aLen; i++) { 
    _text = aElements[i].innerHTML; 
    // remove url params 
    if (0 <= (_param = _text.indexOf('?'))) { 
     _text = _text.substr(0, _param - 1); 
    } 
    if (0 == _text.indexOf('http://') && _text.length > maxLength) { 
     _text = _text.trunc(maxLength); 
     // _text = _text.trunc(maxLength, true, '/'); 
    } 
    aElements[i].innerHTML = _text; 
} 
+0

我想說,不要打擾URL參數等等,只是用'trunc'截斷文本節點 – strager 2010-08-24 04:12:31

+0

它只是對最終用戶來說更漂亮一點的是不會看到URL參數...但是,可能需要/必需它們。在任何情況下,IF塊都可以簡單地進行註釋(或者對另一個參數有條件...) – 2010-08-24 04:17:25

0

在這裏,我想你實際上是想用一個正則表達式而從未提及jQuery的.. headslap ...

var s = '<a href="http://www.abc.com/thisSite/myPages/blah-blah-blah.aspx">http://www.abc.com/thisSite/myPages/blah-blah-blah.aspx</a>'; 
var t = s.replace(/(<a [^>]*>)([^<]{1,20})([^<]*)(<\/a>)/, function(str, p1, p2, p3, p4) { return p1 + p2 + (p3.length ? '...' : '') + p4; }); 
document.write(t); 

http://jsfiddle.net/5kSzL/