jQuery(// Alle td finden, die a enthalten .truncated Element. Ermitteln der tatsächlichen Breite (durch Entfernen des Inhalts und erneutes Hinzufügen) des td. Anwenden von minWidth bei Bedarf auf die td)
jQuery('.truncated').closest('td').each(function() {
var text = jQuery(this).text();
var widthOriginal = jQuery(this).width();
var widthEmpty = jQuery(this).text('').width();
jQuery(this).text(text);
if(widthOriginal >= widthEmpty){
var width = (parseInt(widthEmpty) - 10) + 'px';
jQuery(this).css('maxWidth', width);
jQuery(this).text(text + '...');
}
});
Das Ergebnis (wie vom obigen Code erwartet) ist:
aber es sollte sein:
Ich dachte, vielleicht versuche ich, den ersten zu finden line des Strings entfernen und den Rest entfernen, habe aber keine Möglichkeit gefunden, das zu tun (und für meinen Geschmack ist das eine Menge „Workaround“). Gibt es einen besseren Weg, das zu tun?
Diese Frage kann hilfreich sein
– Sterling Archer
24. September 2014 um 14:49 Uhr
Haben Sie versucht, den verfügbaren Platz zu ermitteln und ihn dann durch einen Faktor zu dividieren, der auf der Pixelbreite des durchschnittlichen Zeichens basiert?
– Marcus Rommel
24. September 2014 um 14:50 Uhr
@MarcusRommel mit dem var widthOriginal = jQuery(this).width(); Ich bekomme den verfügbaren Platz. Wie könnte ich diese Abteilung erstellen?
– Michel Ayres
24. September 2014 um 14:59
@SterlingArcher Das Problem besteht darin, dass die Antworten auf die von Ihnen verlinkte Frage auf der Anzahl der Zeichen basieren (if (string.length > 5)). Was ich brauche, ist, es basierend auf der Größe (Pixel) zu tun.
– Michel Ayres
24. September 2014 um 15:02 Uhr
Für die Division probieren Sie einfach einige Teiler manuell aus (4,5,6…) und verwenden Sie, was passt. Sie wissen dann, wie viele Zeichen eine Zeile füllen, und können Ihre Zeichenfolgen so kürzen, dass sie so lang werden.
– Marcus Rommel
24. September 2014 um 16:19 Uhr
Das Abschneiden einzeiliger Texte kann einfach mit CSS erreicht werden text-overflow Eigenschaft, die von allen gängigen Browsern unterstützt wird, einschließlich IE seit Version 6.
Die Sache ist, dass text-overflow allein bringt nicht viel. Es definiert nur, was passieren wird wenn es welche gibt Text läuft über den Container. Um also Ergebnisse zu sehen, müssen wir den Text zunächst überlaufen lassen, indem wir ihn auf eine einzelne Zeile zwingen. Es ist auch wichtig, die einzustellen overflow Eigenschaft des Containers:
.truncated {
display: block;
white-space: nowrap; /* forces text to single line */
overflow: hidden;
text-overflow: ellipsis;
}
Könnten Sie Ihrer Antwort eine Quelle hinzufügen? Im Falle einer Unterbrechung/Änderung des Links oder dem Verlust der auf dem Link enthaltenen Informationen.
Wirklich netter Ansatz 🙂 Wusste/bemerkte diese Eigenschaft nicht overflow CSS-Stil. Danke =D
– Michel Ayres
23. Februar 2015 um 11:13 Uhr
Nur um darauf hinzuweisen, dass es so sein sollte, damit es richtig funktioniert white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
– Michel Ayres
13. März 2015 um 13:40 Uhr
Ich hatte keine Ahnung, dass es das gibt!
– Stevo
7. März 2016 um 8:43
WICHTIG: Du muss enthalten white-space: nowrap Und overflow: hidden damit das funktioniert.
– Lukas
7. März 2016 um 22:26
Wenn Sie das Tabellenlayout auf „Fest“ setzen und das td Überlauf als hiddenkönnten Sie Auslassungspunkte als Float-Right voranstellen div wenn das tdDie Scrollbreite von ist größer als die Clientbreite.
Hier ist das CSS, das Stile enthält, um ein Durchscheinen in der Tabelle zu verhindern:
Diese Frage kann hilfreich sein
– Sterling Archer
24. September 2014 um 14:49 Uhr
Haben Sie versucht, den verfügbaren Platz zu ermitteln und ihn dann durch einen Faktor zu dividieren, der auf der Pixelbreite des durchschnittlichen Zeichens basiert?
– Marcus Rommel
24. September 2014 um 14:50 Uhr
@MarcusRommel mit dem
var widthOriginal = jQuery(this).width();
Ich bekomme den verfügbaren Platz. Wie könnte ich diese Abteilung erstellen?– Michel Ayres
24. September 2014 um 14:59
@SterlingArcher Das Problem besteht darin, dass die Antworten auf die von Ihnen verlinkte Frage auf der Anzahl der Zeichen basieren (
if (string.length > 5)
). Was ich brauche, ist, es basierend auf der Größe (Pixel) zu tun.– Michel Ayres
24. September 2014 um 15:02 Uhr
Für die Division probieren Sie einfach einige Teiler manuell aus (4,5,6…) und verwenden Sie, was passt. Sie wissen dann, wie viele Zeichen eine Zeile füllen, und können Ihre Zeichenfolgen so kürzen, dass sie so lang werden.
– Marcus Rommel
24. September 2014 um 16:19 Uhr