我正在尝试检测(通过 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 处理为代价。