以下代码用于检查目标 div 在溢出(y-overflow)之前可以包含多少行(澄清:文本行)。
它的工作原理是克隆 DOM 元素,清空其内容,然后<br>
一次添加一个标签(强制换行),每次检查是否溢出(通过检查是否 scrollHeight > clientHeight)。
在调试时我注意到它在 Chome 和 FF 中有效,但在 IE9 中,无论插入多少
标签,垂直滚动条都不会出现,因此循环永远不会正确退出。知道如何使它与 IE 一起工作吗?
function checkNumRows (obj){
var overflow = false, rows = 0;
var measureDiv = obj.clone().empty().css('overflow', 'auto'); //make a clone of the original
measureDiv.appendTo(obj.parent()); //append it to DOM
while (!overflow && rows < 500) {//set upper limit to 500 rows to prevent infinite looping for whatever reason
measureDiv.append('<br>');
overflow = measureDiv[0].scrollHeight > measureDiv[0].clientHeight ? true : false;
rows = rows + 1;
}
measureDiv.remove(); //cleanup
return rows - 1; //return max rows before overflow occured
}
alert(checkNumRows($("#testDiv"))); //IE incorrectly returns num rows as the max 499