Es war einmal, dass ich dies tun musste, und die einzige browserübergreifende zuverlässige Lösung, auf die ich stieß, war Hackjob. Ich bin nicht der größte Fan solcher Lösungen, aber es liefert immer wieder das richtige Ergebnis.
Die Idee ist, dass Sie das Element klonen, die Begrenzungsbreite entfernen und testen, ob das geklonte Element breiter als das Original ist. Wenn ja, wissen Sie, dass es abgeschnitten worden sein wird.
Beispiel: Verwenden von jQuery:
var $element = $('#element-to-test');
var $c = $element
.clone()
.css({display: 'inline', width: 'auto', visibility: 'hidden'})
.appendTo('body');
if( $c.width() > $element.width() ) {
// text was truncated.
// do what you need to do
}
$c.remove();
Ich habe eine jsFiddle erstellt, um dies zu demonstrieren: http://jsfiddle.net/cgzW8/2/
Sie können sogar Ihren eigenen benutzerdefinierten Pseudo-Selektor für jQuery erstellen:
$.expr[':'].truncated = function(obj) {
var $this = $(obj);
var $c = $this
.clone()
.css({display: 'inline', width: 'auto', visibility: 'hidden'})
.appendTo('body');
var c_width = $c.width();
$c.remove();
if ( c_width > $this.width() )
return true;
else
return false;
};
Verwenden Sie es dann, um Elemente zu finden
$truncated_elements = $('.my-selector:truncated');
Demo: http://jsfiddle.net/cgzW8/293/
Hoffentlich hilft das, hacky wie es ist.