Tronquer une chaîne de droite JavaScript
Je tiens à tronquer un chargé dynamiquement chaîne à l'aide de droites JavaScript. C'est une url, donc il n'y a pas d'espaces, et je ne se soucient pas des frontières de mot, juste des personnages.
Voici ce que j'ai:
var pathname = document.referrer; //wont work if accessing file://paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
- Quel rôle voulez-vous de les tronquer? Votre exemple ne pas transmettre l'intention très bien.
- oh ok - j'ai envie de tronquer l'URL à un certain nombre de caractères, de sorte que lorsque j'ai mis le innerHTML de "foo" cela ne peut pas s'écouler hors de la div s'il est trop long.
- *mais - le innerHTML, pas le var chemin lui-même.
- Pourquoi ne pas simplement utiliser le css pour masquer le dépassement de la div? overflow: hidden
- Parce que ce serait une mauvaise pratique de l'INTERFACE utilisateur-sage - si l'utilisateur s'attend à voir l'url qu'ils vient de partir (document.référent), et je suis le raccourcir, je tiens à indiquer qu'ils ne sont que de voir une partie de l'url, et qu'il n'y avait pas une erreur. A côté de cela, la méthode que vous proposez serait cut les caractères de la moitié, qui aurait l'air horrible.
- vous devez utiliser les css
Vous devez vous connecter pour publier un commentaire.
Utiliser le sous-chaîne méthode:
Donc dans votre cas:
length
- retours à vide.toString().
pour la convertir en une chaîne de caractères quisubstring()
peut gérer.oui, 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!
Ce qui est une erreur. Que faire si le document.référent a une apostrophe dans? Ou divers autres caractères qui ont une signification particulière en HTML. Dans le pire des cas, 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 chaînes.
Pensé que je pourrais donner Sugar.js une mention. Il a une troncature de la méthode qui est assez intelligent.
De la la documentation:
Exemple:
De sortie:
Sugar is a Javascript library that extends native objects
... L'extension native des objets en JavaScript est généralement considéré comme une Mauvaise Idée™.Code suivant tronque une chaîne et ne se fend pas les mots, et au lieu de jeter la parole où la troncature s'est produite. Totalement basé sur Sugar.js source.
Voici une méthode que vous pouvez utiliser. C'est la réponse pour l'un de FreeCodeCamp Défis:
Oui,
substring
fonctionne très bien:dans le cas où vous souhaitez tronquer un mot.
JS: