Ich habe eine Spanne mit dynamischen Daten auf meiner Seite, mit ellipsis
Stil.
.my-class
{
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
width: 71px;
}
<span id="myId" class="my-class"></span>
document.getElementById('myId').innerText = "...";
Ich möchte diesem Element einen Tooltip mit demselben Inhalt hinzufügen, aber ich möchte, dass er nur angezeigt wird, wenn der Inhalt lang ist und die Auslassungspunkte auf dem Bildschirm angezeigt werden.
Gibt es eine Möglichkeit, dies zu tun?
Löst der Browser ein Ereignis aus, wenn ellipsis
es aktiviert ist?
* Browser: Internet Explorer
text-overflow:ellipsis;
dies in Firefox überhaupt nicht funktioniert - siehe diese Frage für weitere Informationenelement.offsetWidth < element.scrollWidth
gemäß dieser Antwort bisher zu funktionieren scheint.text-overflow:ellipsis;
jetzt in Firefox; Es wurde in Firefox 7 hinzugefügt (veröffentlicht im September 2011).Antworten:
Hier ist eine Möglichkeit, die mithilfe der integrierten Ellipseneinstellung erfolgt und das
title
Attribut On-Demand (mit jQuery) auf der Grundlage von Martin Smiths Kommentar hinzufügt :quelle
"As of jQuery 1.7, the .on() method is the preferred method for attaching event handlers to a document"
Weitere Informationen finden Sie unter api.jquery.com/bind und api.jquery.com/onHier ist eine reine CSS-Lösung. Keine Notwendigkeit für jQuery. Es wird kein Tooltip angezeigt, sondern der Inhalt wird beim Mouseover nur auf seine volle Länge erweitert.
Funktioniert hervorragend, wenn Sie Inhalte haben, die ersetzt werden. Dann müssen Sie nicht jedes Mal eine jQuery-Funktion ausführen.
quelle
Die Antwort von uosɐſ ist grundsätzlich richtig, aber Sie möchten sie wahrscheinlich nicht im mouseenter-Ereignis tun. Dies führt dazu, dass die Berechnung jedes Mal durchgeführt wird, um festzustellen, ob sie benötigt wird, wenn Sie mit der Maus über das Element fahren. Wenn sich die Größe des Elements nicht ändert, gibt es keinen Grund, dies zu tun.
Es ist besser, diesen Code sofort nach dem Hinzufügen des Elements zum DOM aufzurufen:
Wenn Sie nicht genau wissen, wann es hinzugefügt wurde, rufen Sie diesen Code auf, nachdem die Seite vollständig geladen wurde.
Wenn Sie mehr als ein einzelnes Element haben, mit dem Sie dies tun müssen, können Sie allen dieselbe Klasse geben (z. B. "mayOverflow") und diesen Code verwenden, um sie alle zu aktualisieren:
quelle
$(".mightOverflow").each(function() { if( $(this).offsetWidth < $(this).scrollWidth && !$(this).attr('title')){ $(this).attr('title', $(this).text()); $(this).css('border-bottom', '1px dotted #A8A8A8'); } });
this.offsetWidth < this.scrollWidth
und möglicherweise wird sogar die Überprüfung!$this.attr('title')
jedes Mal durchgeführt, wenn Sie mit der Maus über das Element fahren.Hier sind zwei weitere reine CSS-Lösungen:
quelle
Hier ist mein jQuery-Plugin:
Verwendung:
Bearbeiten:
Ich habe einen Kern für dieses Plugin gemacht. https://gist.github.com/UziTech/d45102cdffb1039d4415
quelle
Wir müssen erkennen, ob die Auslassungspunkte wirklich angewendet werden, und dann einen Tooltip anzeigen, um den Volltext anzuzeigen. Es reicht nicht aus, nur "
this.offsetWidth < this.scrollWidth
" zu vergleichen, wenn das Element fast seinen Inhalt enthält, sondern nur ein oder zwei weitere Pixel in der Breite fehlen, insbesondere für den Text von chinesischen / japanischen / koreanischen Zeichen in voller Breite.Hier ist ein Beispiel: http://jsfiddle.net/28r5D/5/
Ich habe einen Weg gefunden, die Ellipsenerkennung zu verbessern:
this.offsetWidth < this.scrollWidth
" und fahren Sie mit Schritt 2 fort, falls dies fehlschlägt.Hier ist meine Verbesserung: http://jsfiddle.net/28r5D/6/
quelle
Ich habe ein jQuery-Plugin erstellt, das den Tooltip von Bootstrap anstelle des integrierten Tooltips des Browsers verwendet. Bitte beachten Sie, dass dies nicht mit einem älteren Browser getestet wurde.
JSFiddle: https://jsfiddle.net/0bhsoavy/4/
quelle
Das habe ich getan. Bei den meisten Tooltip-Skripten müssen Sie eine Funktion ausführen, in der die Tooltips gespeichert sind. Dies ist ein jQuery-Beispiel:
Wenn Sie nicht nach Auslassungspunkten suchen möchten, können Sie Folgendes vereinfachen:
Ich habe das "Wann" um mich herum, so dass die "setupTooltip" -Funktion erst ausgeführt wird, wenn alle Titel aktualisiert wurden. Ersetzen Sie den "setupTooltip" durch Ihre Tooltip-Funktion und das * durch die Elemente, die Sie überprüfen möchten. * wird sie alle durchgehen, wenn Sie es verlassen.
Wenn Sie einfach nur die Titelattribute mit dem Tooltip des Browsers aktualisieren möchten, können Sie Folgendes vereinfachen:
Oder ohne Überprüfung auf Auslassungspunkte:
quelle
Wenn Sie dies ausschließlich mit Javascript tun möchten, würde ich Folgendes tun. Geben Sie dem Bereich ein ID-Attribut (damit es leicht aus dem DOM abgerufen werden kann) und platzieren Sie den gesamten Inhalt in einem Attribut mit dem Namen "Inhalt":
In Ihrem Javascript können Sie dann Folgendes tun, nachdem das Element in das DOM eingefügt wurde.
Wenn Sie Javascript verwenden, um den Bereich in das DOM einzufügen, können Sie den Inhalt natürlich vor dem Einfügen in einer Variablen belassen. Auf diese Weise benötigen Sie kein Inhaltsattribut für den Bereich.
Es gibt elegantere Lösungen als diese, wenn Sie jQuery verwenden möchten.
quelle
$("#myDataId").attr("title", function() { var innerText = $(this).text(); var content = $(this).attr("content"); if (innerText.length <= content.length) { return content; } return null; });
Ich habe eine CSS-Klasse, die bestimmt, wo Auslassungspunkte gesetzt werden sollen. Basierend darauf mache ich Folgendes (Elementmenge könnte unterschiedlich sein, ich schreibe diejenigen, bei denen Auslassungspunkte verwendet werden, natürlich könnte es ein separater Klassenselektor sein):
quelle
this
war einanchor
so, dass ichthis.text()
anstelle vonval()
Hier ist eine Vanilla JavaScript-Lösung:
quelle
Das war meine Lösung, wirkt wie ein Zauber!
quelle
Keine der oben genannten Lösungen hat bei mir funktioniert, aber ich habe eine großartige Lösung gefunden. Der größte Fehler, den Menschen machen, besteht darin, dass alle 3 CSS-Eigenschaften beim Laden der Seite für das Element deklariert werden. Sie müssen diese Stile + QuickInfo dynamisch hinzufügen, WENN und NUR WENN die Spanne, auf der Ellipsen angezeigt werden sollen, breiter ist als die übergeordnete.
quelle
Sie könnten die Spanne möglicherweise mit einer anderen Spanne umgeben und dann einfach testen, ob die Breite der ursprünglichen / inneren Spanne größer als die der neuen / äußeren Spanne ist. Beachten Sie, dass ich möglicherweise sage - es basiert ungefähr auf meiner Situation, in der ich ein
span
Inneres von a hatte,td
also weiß ich nicht wirklich, ob es mit einemspan
Inneren von a funktioniertspan
.Hier ist jedoch mein Code für andere, die sich möglicherweise in einer ähnlichen Position wie ich befinden. Ich kopiere / füge es ohne Änderung ein, obwohl es sich in einem Winkelkontext befindet. Ich denke nicht, dass dies die Lesbarkeit und das wesentliche Konzept beeinträchtigt. Ich habe es als Servicemethode codiert, weil ich es an mehr als einer Stelle anwenden musste. Der Selektor, den ich übergeben habe, war ein Klassenselektor, der mehreren Instanzen entspricht.
quelle