jQuery offset()问题:获取点击所在侧边栏内sidebar-header的位置
解决方法
问题出在你直接用$('.sidebar-header')时,jQuery会选中DOM里所有带这个类的元素,默认取第一个(也就是左侧侧边栏的那个),所以不管点哪个侧边栏里的元素,拿到的都是左边的header位置。
要获取点击元素所在侧边栏的header,得基于点击的元素(this)向上找到它所属的.sidebar-inner容器,再在这个容器里找.sidebar-header,具体修改代码如下:
$('.cssClass1, .cssClass2').on('click', function (){ // 先定位到点击元素所属的侧边栏容器,再找内部的header var targetHeader = $(this).closest('.sidebar-inner').find('.sidebar-header'); var position = targetHeader.offset(); if (position.top < 0){ console.log('unvisible'); } else { console.log('visible') }; });
关键方法说明:
$(this).closest('.sidebar-inner'):从点击元素开始向上遍历DOM树,找到最近的.sidebar-inner父容器,精准锁定当前点击元素所属的侧边栏。.find('.sidebar-header'):在这个容器内部查找目标header,确保拿到的是当前侧边栏的,而非其他侧边栏的。
如果不想用closest,也可以用$(this).parents('.sidebar-inner').first(),效果类似,但closest性能更优——找到第一个匹配项就会停止遍历。
内容的提问来源于stack exchange,提问作者Groundhog
相关产品推荐
相关产品推荐

