使用普通的
Javascript或jQuery,我需要获得滚动元素的完整高度.但DOM属性scrollHeight
is apparently not 100% reliable.
我想象暂时给项目css高度auto,检查它的大小,然后将css返回到它的先前值(它本身有问题 – 如何得到css高度:100%而不是高度:1012px像jQuery .css(‘height’)将返回).但后来我发现由于jQuery将css样式直接应用于元素的方式,只需应用样式”将其返回到其正常的样式表声明值,因此理论上我可以这样做:
$el.css('height','auto'); scrollHeight = $el.height(); $el.css('height','');
但这不起作用. height:auto不会覆盖我的元素100%的原始样式,并使元素占据其完整的所需高度.
所以现在我正在考虑以下几点:使用第一个子元素顶部的位置和最后一个子元素底部的位置来获得高度. (如果需要,我可以调整填充和边距,这只是一个概念证明.)
function scrollHeight($el) { var lastEl = $el.children(':last'); return ( lastEl.position().top + lastEl.height() - $el.children(':first').position().top; ); }
一些在Math.max($el [0] .scrollHeight,$el.height())工作的人也可能有用……
这是一个糟糕的主意吗?我不可能是唯一一个需要知道DOM元素的scrollHeight并让它可靠,不随项目滚动而改变,并且在所有主流浏览器以及IE 8中工作的人(尽管它会是有趣的是知道IE 6& 7的解决方案.
解决方法
代替
$el.css(‘height’,’auto’);
试试 –
$el.attr(‘style’,’height:auto!important’);
我提到尝试这个因为你说 –
height:auto isn’t overriding my element’s original style of 100% and making the element take up its full desired height.