テキストオーバーフローが有効になっているときに(JavaScriptを介して)検出しようとしています。多くの調査の結果、Firefox のすべてのバージョンを除いて、実用的な解決策があります。
http://jsfiddle.net/tonydew/mjnvk/
省略記号が適用されるようにブラウザを調整すると、Chrome、Safari、IE8+ でさえ省略記号がアクティブであることを警告します。Firefox (17 と 18 を含む、私が試したすべてのバージョン) ではそれほどではありません。Firefox は、省略記号がアクティブでないことを常に通知します。
console.log() の出力は、その理由を示しています。
Firefox (OS X):
116/115 - false
347/346 - false
Chrome (OS X):
116/115 - false
347/851 - true
Firefox では、scrollWidth が offsetWidth より大きくなることはありません。
解決策に最も近いのは、「IE と Firefox が div に対して異なるオーバーフロー ディメンションを返すのはなぜですか?」ですが、提案された解決策を既に使用しています。
Firefoxでもこれを機能させる方法について、誰かが光を当てることができますか?
編集: 以下の @Cezary の回答に加えて、マークアップの変更を必要としない方法を見つけました。ただし、各要素を一時的に複製して次の測定を行うため、もう少し作業が必要です。
$(function() {
$('.overflow').each(function(i, el) {
var element = $(this)
.clone()
.css({display: 'inline', width: 'auto', visibility: 'hidden'})
.appendTo('body');
if( element.width() > $(this).width() ) {
$(this).tooltip({
title: $(this).text(),
delay: { show: 250, hide: 100 },
});
}
element.remove();
});
});
http://jsfiddle.net/tonydew/gCnXh/
これの効率について誰かコメントがありますか?潜在的なオーバーフロー要素が多数あるページがある場合、悪影響はありますか? 可能であれば、既存のマークアップを変更することは避けたいと思いますが、ページの読み込みごとに過剰な JS 処理を犠牲にすることは避けたいと考えています。