循环中获取.each()遍历元素的offset()坐标报错如何解决?
错误原因
$('.coa-content h2')返回的是jQuery元素集合,通过[i]下标取出的元素是原生DOM对象,而offset()是jQuery专属的实例方法,仅能在jQuery包装对象上调用,原生DOM对象不存在该方法,因此触发类型错误。
解决方法
你可以选择任意一种方案修改代码:
- 在
each回调中直接使用$(this)获取当前遍历的jQuery元素对象:
var blogHeaders = $('.coa-content h2'); $(window).scroll(function() { blogHeaders.each(function() { console.log($(this).offset().top); }); })
- 若需要通过下标访问元素,将取出的原生DOM对象用
$()包装为jQuery对象后再调用offset():
console.log($(blogHeaders[i]).offset().top);
优化建议
scroll事件触发频率极高,频繁执行遍历逻辑可能造成性能损耗,建议添加节流函数限制执行频率,提升页面流畅度。
内容的提问来源于stack exchange,提问作者user5481714
相关产品推荐
相关产品推荐

