次のコードは、オーバーフロー(y-overflow)する前にターゲットdivに含めることができる行数(明確化:テキスト行)を確認するために使用されます。
これは、DOM要素のクローンを作成し、その内容を空にしてから、<br>
タグを1つずつ追加して(新しい行を強制するため)、オーバーフローがないか毎回チェックする(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