我有一个 包含很多 "li" 元素的 "ul" 列表(数百个),该 "ul" 的高度固定为约 400px,具有 css 属性 overflow:scroll,每个 "li" 的高度为 40px。因此,在任何时刻都只有不超过 10 个可见的 "li"(其余需要滚动)。
如何使用 jquery 将 ul 的滚动位置改变到特定的 li?
有什么想法?
有什么想法?
$('#yourUL').scrollTop($('#yourUL li:nth-child(14)').position().top);
如果你想要动画效果,请执行以下操作
$('#yourUL').animate({
scrollTop: $('#yourUL li:nth-child(14)').position().top
}, 'slow');
显然需要针对不同的 li
调整 14
。
$('#yourUL').scrollTop(0).scrollTop($('#yourUL li:nth-child(14)').position().top);
这样我们总是从顶部获取位置。 - TecHunter$('#yourUL').scrollTop($('#yourUL').top + $('#yourUL li:nth-child(14)').position().top);
因为它不会出现奇怪的跳转到顶部。 - ayal gelles$('#yourUL').scrollLeft($('#yourUL li:nth-child(14)').position().left);
- Beer Me我接近了@lonesomeday的答案,但是我发现我必须计算特定li
相对于第一个li
的位置,因为它会根据包含ul
的当前滚动位置而改变。
$('#yourUL').scrollTop($('#yourUL li:nth-child(14)').position().top - $('#yourUL li:first').position().top)
$('html, body').animate({
scrollTop:$('#ulID li:eq(1)').offset().top
}, 1000);
li
元素匹配 eq
,你甚至可以自定义选择器。#ulID li:eq(1)
的位置上指定适当的选择器 :) - Sarfraz$('html, body')
改为 $('#your-UL')
。 - thirtydotposition()
而不是offset()
,因为我们在这里讨论的不是元素的绝对位置,而是相对于该元素的位置。 - lonesomeday如果有人需要原生的JS版本,以下内容对我来说运行良好,50的值只是为了在列表顶部附近显示整个项目。您可以进行调整。
function updateListSelection(liID) {
var list = document.getElementById("id Tag Of The <UL> element"),
targetLi = document.getElementById(liID); // id tag of the <li> element
list.scrollTop = (targetLi.offsetTop - 50);
};