2010-08-24 5 views
0

Je veux un regex qui remplacera la longue URL avec ..., par exemple,javascript regex pour remplacer url d'une certaine longueur avec

Je passe dans une chaîne avec url en elle, à savoir

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

devrait être converti en

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

toute aide serait appriciated.

+0

Vous pouvez publier du texte HTML en le mettant en retrait de 4 espaces, le rendant ainsi "codé" ou "préformaté". Il y a aussi un bouton dans le mini-éditeur qui va indenter un bloc de lignes sélectionné 4 espaces (celui avec l'étiquette 1010101) –

+0

merci beaucoup pour votre aide ... :) – alittlebitofday

+0

utilisez-vous n'importe quelle bibliothèque (ig JQuery, etc.)? Générez-vous le HTML à partir d'un script de serveur (par exemple PHP)? Il serait préférable que cela soit résolu à partir du script de service, à moins que vous n'obteniez les URL d'un appel Ajax, donc la bibliothèque ... –

Répondre

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 normale

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; 
    } 
} 

Je n'ai aucune idée si cela fonctionne ou non comme je l'ai écrit de ma tête. Amusez-vous.

+0

fyi: 'as' est un mot réservé.Vous devrez changer cela –

0

Vous aurez besoin d'utiliser le bit de code suivant

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

Untested.

1

Basé sur this solution, voici ce que vous pouvez faire:

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_; 
    }; 

Ensuite, il suffit d'appliquer cela à des ancres afficher des liens:

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

Je dirais ne pas déranger avec les paramètres d'URL, etc, juste tronquer le noeud de texte avec' trunc' – strager

+0

c'est juste plus joli pour l'utilisateur final de ne pas voir les paramètres d'URL ... mais là encore, ils peuvent être nécessaires/requis Dans tous les cas, le bloc IF peut simplement être commenté (ou conditionnel à un autre paramètre ...) –

0

Et là, je pensais que vous voulait vraiment utiliser une expression rationnelle et jamais mentionné jquery .. têtière ...

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/