250 votes

Tronquer une chaîne directement javascript

J'aimerais tronquer une chaîne chargée dynamiquement à l'aide de javascript direct. C'est une url, donc il n'y a pas d'espaces, et je ne me soucie évidemment pas des limites de mots, juste des caractères.

Voici ce que j'ai eu:

 var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
 

445voto

Larsenal Points 17080

Utilisez la méthode de sous - chaîne :

 var length = 3;
var myString = "ABCDEFG";
var myTruncatedString = myString.substring(0,length);
// The value of myTruncatedString is "ABC"
 

Donc dans votre cas:

 var length = 3;  // set to the number of characters you want to keep
var pathname = document.referrer;
var trimmedPathname = pathname.substring(0, Math.min(length,pathname.length));

document.getElementById("foo").innerHTML =
     "<a href='" + pathname +"'>" + trimmedPathname + "</a>"
 

18voto

bobince Points 270740

oui, la sous-chaîne. Vous n'avez pas besoin de faire des Maths.min; sous-chaîne avec une plus l'indice que la longueur de la chaîne se termine à la longueur d'origine.

Mais!

document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"

C'est une erreur. Que faire si le document.référent a une apostrophe? Ou divers autres caractères qui ont une signification particulière en HTML. Dans le pire des cas, l'attaquant de code dans le référent pourrait injecter du code JavaScript dans votre page, ce qui est une faille de sécurité XSS.

Alors qu'il est possible d'échapper les caractères dans le chemin d'accès manuellement pour arrêter ce qui se passe, c'est un peu de douleur. Il est préférable d'utiliser les méthodes du DOM que de bricoler avec innerHTML cordes.

if (document.referrer) {
    var trimmed= document.referrer.substring(0, 64);
    var link= document.createElement('a');
    link.href= document.referrer;
    link.appendChild(document.createTextNode(trimmed));
    document.getElementById('foo').appendChild(link);
}

10voto

Brian Points 13596

Je pensais que je donnerais une mention à Sugar . Il a une méthode tronquée qui est très intelligente.

De la documentation :

Tronque une chaîne. À moins que split soit vrai, tronquer ne divisera pas les mots, mais supprimera le mot sur lequel la troncature a eu lieu.

Exemple:

 'just sittin on the dock of the bay'.truncate(20)
 

Sortie:

 just sitting on...
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X