可靠返回元件's scrollHeight而不使用`scrollHeight`属性
Reliably return element's scrollHeight without using `scrollHeight` property
使用纯Javascript或jQuery,我需要获得滚动元素的全高。但是DOM属性scrollHeight
显然不是100%可靠的。
我设想暂时将该项的css高度设置为auto
,检查其大小,然后将css返回到其先前的值(这本身就有问题——我如何获得css height:100%
而不是像jQuery .css('height')
将返回的height:1012px
)。但后来我发现,由于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没有覆盖我的元素100%的原始样式,并且使得元件占据其所需的全部高度。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 无法读取属性'scrollHeight'的未定义
- 可靠返回元件's scrollHeight而不使用`scrollHeight`属性
- IE8 scrollHeight属性导致问题
- 未捕获的类型错误:不能读取属性'scrollHeight'的定义