Hat jemand eine ausgefeiltere Lösung / Bibliothek zum Abschneiden von Zeichenfolgen mit JavaScript und zum Setzen einer Ellipse am Ende als die offensichtliche:
if (string.length > 25) {
string = string.substring(0, 24) + "...";
}
javascript
string
truncation
Naltatis
quelle
quelle
Antworten:
Im Wesentlichen überprüfen Sie die Länge der angegebenen Zeichenfolge. Wenn es länger als eine bestimmte Länge ist
n
, schneiden Sie es auf Längen
(substr
oderslice
) und fügen Sie eine HTML-Entität hinzu…
der abgeschnittenen Zeichenfolge (…) hinzu.Eine solche Methode sieht aus
Wenn Sie mit "anspruchsvoller" das Abschneiden an der letzten Wortgrenze einer Zeichenfolge meinen, benötigen Sie eine zusätzliche Prüfung. Zuerst schneiden Sie die Zeichenfolge auf die gewünschte Länge, dann schneiden Sie das Ergebnis bis zur letzten Wortgrenze
Sie können den nativen
String
Prototyp mit Ihrer Funktion erweitern. In diesem Fall sollte derstr
Parameter entfernt undstr
innerhalb der Funktion ersetzt werden durchthis
:Dogmatischere Entwickler können Sie stark darüber kapitulieren (" Ändern Sie keine Objekte, die Sie nicht besitzen ". Es würde mir jedoch nichts ausmachen).
Ein Ansatz ohne Erweiterung des
String
Prototyps besteht darin, ein eigenes Hilfsobjekt zu erstellen, das die von Ihnen angegebene (lange) Zeichenfolge und die zuvor erwähnte Methode zum Abschneiden enthält. Das macht der folgende Ausschnitt.Code-Snippet anzeigen
Schließlich können Sie CSS nur verwenden, um lange Zeichenfolgen in HTML-Knoten abzuschneiden. Es gibt Ihnen weniger Kontrolle, kann aber durchaus eine praktikable Lösung sein.
Code-Snippet anzeigen
quelle
substr
ist eine Länge, daher sollte ersubstr(0,n)
stattdessen auf die erstenn
Zeichen beschränkt werden.…
durch das tatsächliche Auslassungszeichen (...
) in Ihrem Codebeispiel. Wenn Sie versuchen, dies für die Interaktion mit APIs zu verwenden, möchten Sie die Nicht-HTML-Entität dort haben.Beachten Sie, dass dies nur für Firefox durchgeführt werden muss.Alle
anderenBrowser unterstützen eine CSS-Lösung (siehe Support-Tabelle ):Die Ironie ist, dass ich diesen Code-Ausschnitt von Mozilla MDC bekommen habe.
quelle
white-space: nowrap;
). Wenn es um mehr als eine Zeile geht, bleibt JavaScript hängen.Your picture ('some very long picture filename truncated...') has been uploaded.
Es gibt triftige Gründe, warum Benutzer dies in JavaScript anstelle von CSS tun möchten.
So schneiden Sie in JavaScript 8 Zeichen (einschließlich Auslassungspunkte) ab:
oder
quelle
.replace(/^(.{7}).{2,}/, "$1…");
stattdessenlong
undshort
werden von älteren ECMAScript-Spezifikationen (ECMAScript 1 bis 3) als zukünftige Schlüsselwörter reserviert. Siehe MDN: Zukünftig reservierte Schlüsselwörter in älteren StandardsVerwenden Sie entweder Lodashs abgeschnitten
oder unterstreichen.strings abgeschnitten .
quelle
Hier ist meine Lösung, die einige Verbesserungen gegenüber anderen Vorschlägen aufweist:
Es:
quelle
Beste Funktion, die ich gefunden habe. Gutschrift auf Text-Auslassungspunkten .
Beispiele :
quelle
Irgendwie funktionierte der obige Code nicht für eine Art kopierten oder geschriebenen Text in der vuejs App. Also habe ich lodash truncate verwendet und es funktioniert jetzt gut.
quelle
Alle modernen Browser unterstützen jetzt eine einfache CSS-Lösung zum automatischen Hinzufügen von Auslassungspunkten, wenn eine Textzeile die verfügbare Breite überschreitet:
(Beachten Sie, dass hierfür die Breite des Elements in irgendeiner Weise begrenzt werden muss, um einen Effekt zu erzielen.)
Basierend auf https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/ .
Es ist zu beachten, dass dieser Ansatz nicht auf der Anzahl der Zeichen basiert. Es funktioniert auch nicht , wenn Sie mehrere Textzeilen zulassen müssen.
quelle
text-direction: rtl
und erreichentext-align: left
. Siehe davidwalsh.name/css-ellipsis-leftDie meisten modernen Javascript - Frameworks ( JQuery , Prototype , etc. ...) haben eine Nutzenfunktion String gehefteten auf die Griffe dieser.
Hier ist ein Beispiel in Prototype:
Dies scheint eine der Funktionen zu sein, mit denen sich jemand anderes befassen / die Sie warten sollen. Ich würde das Framework damit umgehen lassen, anstatt mehr Code zu schreiben.
quelle
truncate()
- möglicherweise benötigen Sie eine Erweiterung wie underscore.string ._.trunc
genau das.Vielleicht habe ich ein Beispiel verpasst, in dem jemand mit Nullen umgeht, aber 3 TOP-Antworten haben bei mir nicht funktioniert, als ich Nullen hatte (Sicher ist mir klar, dass die Fehlerbehandlung und Millionen anderer Dinge NICHT in der Verantwortung der Person liegen, die die Frage beantwortet, sondern seitdem Ich hatte eine vorhandene Funktion zusammen mit einer der hervorragenden Antworten auf Kürzungsellipsen verwendet, von denen ich dachte, ich würde sie für andere bereitstellen.
z.B
Javascript:
mit Kürzungsfunktion
Wenn news.comments jedoch null ist, würde dies "brechen".
Finale
Trunc-Funktion mit freundlicher Genehmigung von KooiInc
Mein einfacher Null-Checker (sucht auch nach dem wörtlichen "Null" -Ding (dies fängt undefinierte, "", null, "null" usw. ab).
quelle
Manchmal sind Dateinamen nummeriert, wobei der Index am Anfang oder am Ende stehen kann. Also wollte ich von der Mitte der Saite aus kürzen:
Beachten Sie, dass ich hier in UTF-8 ein Füllzeichen mit mehr als 1 Byte verwendet habe.
quelle
Sie können die Funktion Ext.util.Format.ellipsis verwenden, wenn Sie Ext.js verwenden.
quelle
Ich habe die Lösung von Kooilnc positiv bewertet. Wirklich schöne kompakte Lösung. Es gibt einen kleinen Randfall, den ich ansprechen möchte. Wenn jemand aus irgendeinem Grund eine wirklich lange Zeichenfolge eingibt, wird diese nicht abgeschnitten:
quelle
Mit einem schnell gefunden googeln ich dieses ... für Sie tut das?
quelle
Textüberlauf: Auslassungspunkte sind die Eigenschaft, die Sie benötigen. Mit diesem und einem Überlauf: versteckt mit einer bestimmten Breite, alles, was den Drei-Perioden-Effekt am Ende übertrifft ... Vergessen Sie nicht, Leerzeichen hinzuzufügen: nowrap oder der Text wird in mehrere Zeilen eingefügt.
quelle
Die Antwort von c_harm ist meiner Meinung nach die beste. Bitte beachten Sie, dass, wenn Sie verwenden möchten
Sie müssen einen Regexp-Objektkonstruktor anstelle eines Literal verwenden. Außerdem müssen Sie
\S
beim Konvertieren dem entkommen .quelle
Verwenden Sie den folgenden Code
quelle
Korrektur der Kooilnc-Lösung:
Dies gibt den Zeichenfolgenwert anstelle des Zeichenfolgenobjekts zurück, wenn es nicht abgeschnitten werden muss.
quelle
Ich musste dies kürzlich tun und endete mit:
Fühlt sich gut und sauber für mich an :)
quelle
Ich benutze gerne .slice () Das erste Argument ist der Startindex und das zweite ist der Endindex. Alles dazwischen bekommen Sie zurück.
quelle
Irgendwo klug: D.
quelle
Diese Funktion übernimmt auch das Abschneiden von Leerzeichen und Wörtern (z. B. Mutter in Motte ...)
Verwendung:
Ausgabe:
quelle