Jquery - Text für Zeile abschneiden (nicht nach Anzahl der Zeichen)

8

Ich benötige ein Jquery-Skript, um einen Text Absatz für Zeile (nicht nach Anzahl der Zeichen) abzuschneiden.

Ich möchte einen gleichmäßig abgeschnittenen Textblock erreichen. Es sollte eine "mehr" und "weniger" Verknüpfung haben, um den Textabsatz zu erweitern und zu verkürzen. Mein Textabsatz ist wie folgt in ein div mit einer Klasse eingeschlossen:

%Vor%

Die nächste Lösung, die ich auf SOF finden kann, ist die folgende (aber es ist für textarea Element und funktioniert nicht für mich): Begrenzung der Zeilenanzahl in textarea

Vielen Dank für irgendwelche Tipps. Ben

    
Bento Graphic 28.06.2010, 07:14
quelle

6 Antworten

5

Für einen grundlegenden Ansatz könnten Sie sich die line-height CSS-Eigenschaft ansehen und diese in Ihren Berechnungen verwenden. Beachten Sie, dass dieser Ansatz keine anderen Inline-Elemente berücksichtigt, die größer als diese Höhe sind (z. B. Bilder).

Wenn Sie etwas fortgeschrittener sein möchten, können Sie die Informationen über jede Zeile mit getClientRects() function abrufen. Diese Funktion gibt eine Sammlung von TextRectangle -Objekten mit Breite, Höhe und Offset für jedes Objekt zurück.

Siehe diese Antwort hier für ein Beispiel (wenn auch ein nicht verwandtes Ziel), wie getClientRects() funktioniert.

Update, hatte ein bisschen Zeit, um zurück zu kommen und diese Antwort mit einem konkreten Beispiel zu aktualisieren. Es ist einfach, aber Sie bekommen die Idee:

Ссылка

Ein paar Hinweise:

  • Die von getClientRects zurückgegebene Sammlung ist statisch. Sie wird nicht automatisch aktualisiert, wenn sich die Abmessungen des übergeordneten Elements ändern. In meinem Beispiel funktioniert das, indem das Größenänderungs-Ereignis des Fensters erfasst wird.

  • Für einige merkwürdige Gründe für die Einhaltung von Standards, die ich nicht verstehe, muss das Element, das Sie getClientRects aufrufen, ein Inline-Element sein. Im Beispiel habe ich ein Container-Div mit dem Text in einem anderen Div innerhalb mit display: inline .

Andy E 28.06.2010 07:26
quelle
3

Ich habe diesen kleinen jQuery-Code erstellt, mit dem ich Text blockweise (über CSS-Klassen) abschneiden kann. Sie können ihn gerne verwenden und kommentieren.

Hier ist das jsFiddle , das auch Funktionen zum Abschneiden von Zeichen oder Wörtern enthält Anzahl. Sie können sehen, dass derzeit die Größe des Fensters wird nicht aktualisiert die Blockanzeige, ich arbeite daran.

%Vor%     
zessx 10.08.2012 09:43
quelle
1

warum nicht das p-Element mit Überlauf: versteckt; geben Sie die Höhe der festen Linie an, berechnen Sie die Höhe des div, so dass die ID genau die Anzahl der Zeilen enthält, die Sie benötigen und die einzige Änderung die Höhe des p von Javascript.

%Vor%     
jikhan 28.06.2010 07:24
quelle
0

Wenn Sie eine Schriftart mit einem festen Abstand verwenden, haben Sie eine Chance auf diese Funktion, da Sie eine gute Vorstellung davon haben, wie viele Buchstaben auf jede Zeile für ein Element mit einer definierten Breite passen. Wenn jedoch ein Wort die Zeilen durchbricht, kann das schwierig werden.

e: Ich habe eine andere Frage gefunden, nach der Sie suchen. Sie hatten auch keine richtige Auflösung, aber meiner Meinung nach scheinen die Höhe und Höhe der Elemente am nächsten zu sein.

"Wie kann ich zählen? Textzeilen innerhalb eines dom-Elements "

    
dmp 28.06.2010 07:24
quelle
0

Ich habe ein kleines Modul erstellt, das mit reinem Textinhalt arbeitet, keine verschachtelten Tags und kein CSS-Padding auf dem texthaltigen Element ist erlaubt (aber diese Funktionalität könnte einfach hinzugefügt werden).

Das HTML:

%Vor%

Das Javascript / Jquery:

%Vor%

Ich hoffe es gefällt euch!

    
Benni 24.11.2017 22:39
quelle
-1

tl; dr - Legen Sie eine Höhe für Ihr Container-div fest und verwenden Sie dann das jQuery dotdotdot-Plugin

War im Begriff, @Andy Es fantastisches Beispiel in ein Plugin zu verwandeln, aber dann erkannte Ссылка das. Unser Anwendungsfall ist, dass wir eine Zeile auf Desktop-Breiten und zwei Zeilen auf Handy / Tablet zeigen möchten.

Unser CSS wird das Container-div einfach auf das Äquivalent von einer oder zwei Zeilenhöhe setzen, und dann scheint das dotdotdot-Plugin den Rest zu verarbeiten.

    
Joshua Stewardson 25.07.2014 19:40
quelle

Tags und Links