Ich möchte eine dynamisch geladene Zeichenfolge mit direktem JavaScript abschneiden. Es ist eine URL, also gibt es keine Leerzeichen, und Wortgrenzen sind mir offensichtlich egal, nur Zeichen.
Hier ist, was ich habe:
var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href="" + pathname +"">" + pathname +"</a>"
Welchen Teil möchten Sie abschneiden? Ihr Beispiel vermittelt die Absicht nicht sehr gut.
– Larsenal
19. August 2009 um 17:44 Uhr
oh ok- Ich möchte die URL bei einer bestimmten Anzahl von Zeichen abschneiden, damit, wenn ich das innere HTML von “foo” setze, es nicht aus dem div fließt, wenn es zu lang ist.
– Bob
19. August 2009 um 17:45 Uhr
*aber- nur das innereHTML, nicht der var-Pfadname selbst.
– Bob
19. August 2009 um 17:46 Uhr
Warum nicht einfach CSS verwenden, um den Überlauf des div zu verbergen? Überlauf versteckt
– Samuel
19. August 2009 um 18:42 Uhr
@Samuel Da es in Bezug auf die Benutzeroberfläche eine schlechte Praxis wäre, wenn der Benutzer erwartet, die URL zu sehen, von der er gerade gekommen ist (document.referrer), und ich sie kürze, möchte ich ihm mitteilen, dass er nur einen Teil sieht der URL, und dass kein Fehler aufgetreten ist. Abgesehen davon würde die von Ihnen vorgeschlagene Methode Zeichen in zwei Hälften schneiden, was schrecklich aussehen würde.
var length = 3;
var myString = "ABCDEFG";
var myTruncatedString = myString.substring(0,length);
// The value of myTruncatedString is "ABC"
Also in deinem Fall:
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>"
Wenn Sie einen Teilstring haben möchten, der bei 0 beginnt, dann macht die substr-Funktion genau dasselbe mit 3 weniger Zeichen;)
– Jackocnr
21. September 2014 um 18:55 Uhr
substr verhält sich seltsam, wenn die Zeichenfolge kürzer als die ist length – gibt leer zurück
– RozzA
26. März 2015 um 22:20 Uhr
Wenn Ihre “Zeichenfolge” eine Zahl ist, müssen Sie sie ebenfalls einfügen .toString(). um es in eine Zeichenfolge zu konvertieren, die substring() klar kommen.
Das ist ein Fehler. Was wäre, wenn document.referrer einen Apostroph hätte? Oder verschiedene andere Zeichen, die in HTML eine besondere Bedeutung haben. Im schlimmsten Fall könnte Angreifercode im Referrer JavaScript in Ihre Seite einschleusen, was eine XSS-Sicherheitslücke darstellt.
Es ist zwar möglich, die Zeichen im Pfadnamen manuell zu maskieren, um dies zu verhindern, aber es ist ein bisschen mühsam. Sie sind besser dran, DOM-Methoden zu verwenden, als mit inneren HTML-Strings herumzuspielen.
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);
}
Ich bin verwirrt, wie vermeidet Ihre Lösung die Sicherheitslücke?
– Bob
19. August 2009 um 21:57 Uhr
Wenn Sie DOM-Methoden wie ‘createTextNode’ und ‘.href=…’ verwenden, setzen Sie direkt den echten zugrunde liegenden Klartextwert. Wenn Sie HTML schreiben, entweder in einer HTML-Datei oder über innerHTML, müssen Sie HTML-Escape-Regeln befolgen. Während also ‘createTextNode(‘A
Der folgende Code schneidet eine Zeichenfolge ab und teilt Wörter nicht auf, sondern verwirft stattdessen das Wort, an dem die Kürzung aufgetreten ist. Vollständig basierend auf der Sugar.js-Quelle.
function truncateOnWord(str, limit) {
var trimmable="\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF";
var reg = new RegExp('(?=[' + trimmable + '])');
var words = str.split(reg);
var count = 0;
return words.filter(function(word) {
count += word.length;
return count <= limit;
}).join('');
}
Das wäre schön, ein “…” hinzuzufügen if result !== str;
– Leo Caseiro
19. September 2016 um 4:33 Uhr
Brian
Dachte, ich würde geben Zucker.js eine Erwähnung. Es hat eine ziemlich schlaue Methode zum Abschneiden.
Kürzt eine Zeichenfolge. Wenn split nicht wahr ist, wird truncate die Wörter nicht teilen und stattdessen das Wort verwerfen, an dem die Kürzung aufgetreten ist.
Beispiel:
'just sittin on the dock of the bay'.truncate(20)
Ausgabe:
just sitting on...
Das wäre schön, ein “…” hinzuzufügen if result !== str;
Welchen Teil möchten Sie abschneiden? Ihr Beispiel vermittelt die Absicht nicht sehr gut.
– Larsenal
19. August 2009 um 17:44 Uhr
oh ok- Ich möchte die URL bei einer bestimmten Anzahl von Zeichen abschneiden, damit, wenn ich das innere HTML von “foo” setze, es nicht aus dem div fließt, wenn es zu lang ist.
– Bob
19. August 2009 um 17:45 Uhr
*aber- nur das innereHTML, nicht der var-Pfadname selbst.
– Bob
19. August 2009 um 17:46 Uhr
Warum nicht einfach CSS verwenden, um den Überlauf des div zu verbergen? Überlauf versteckt
– Samuel
19. August 2009 um 18:42 Uhr
@Samuel Da es in Bezug auf die Benutzeroberfläche eine schlechte Praxis wäre, wenn der Benutzer erwartet, die URL zu sehen, von der er gerade gekommen ist (document.referrer), und ich sie kürze, möchte ich ihm mitteilen, dass er nur einen Teil sieht der URL, und dass kein Fehler aufgetreten ist. Abgesehen davon würde die von Ihnen vorgeschlagene Methode Zeichen in zwei Hälften schneiden, was schrecklich aussehen würde.
– Bob
19. August 2009 um 22:02 Uhr