昔々、私はこれを行う必要がありました、そして私が出くわした唯一のクロスブラウザの信頼できる解決策はハックの仕事でした。私はこのようなソリューションの最大のファンではありませんが、それは確かに何度も正しい結果を生み出します。
要素を複製し、境界幅を削除して、複製された要素が元の要素よりも広いかどうかをテストするという考え方です。もしそうなら、あなたはそれが切り捨てられるだろうということを知っています。
たとえば、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();
これを実証するためにjsFiddleを作成しました。http ://jsfiddle.net/cgzW8/2/
jQuery用に独自のカスタム疑似セレクターを作成することもできます。
$.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;
};
次に、それを使用して要素を検索します
$truncated_elements = $('.my-selector:truncated');
デモ: http: //jsfiddle.net/cgzW8/293/
うまくいけば、これはそのままハッキーです。