如何滚动到ul列表中的li元素

时间:2012-10-12 18:19:47

标签: javascript jquery list web

我在带有li元素的div中有一个ul列表,而li元素里面是一个复选框。我有复选框的ID。所以我想获得复选框的父li元素并滚动到它的位置。我无法使其发挥作用。

我的HTML是这样的:

<div id="divElement">
   <ul>
      <li>
         <input type="checkbox" id="343532532523" />
      </li>
   </ul>
</div>

我尝试了这两种方法,它们对我不起作用:

$('#divElement').scrollTop($('#343532532523').parent().position().top);
$('#divElement').firstChild().scrollTop($('#343532532523).parent().position().top);

7 个答案:

答案 0 :(得分:8)

如果有人需要一个香草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);
};

答案 1 :(得分:3)

我让我的另一个开发朋友帮助我,我们想出了这个,它有效,没有动画,我能做到,我只是不需要它..

var offset = $('#someDivElementId ul li').first().position().top;
$('#someDivElementId').scrollTop($('#23532532532532').parent().position().top - offset);

答案 2 :(得分:1)

我使用Element.scrollIntoView()方法解决了这个问题:

https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

它适用于Chrome,Firefox和Internet Explorer - 我还没有在其他任何浏览器中测试过它。

答案 3 :(得分:1)

老问题,但是这里是一个纯粹的js函数,它将LI滚动到顶部的视图中,如果它当前在顶部之上,在底部,如果它当前在底部之下。如果使用向下和向上箭头滚动它,则可以平滑滚动UL(使用addEventListener进行keydown和keyup事件)。

function scrollUL(li) {
    // scroll UL to make li visible
    // li can be the li element or its id
    if (typeof li !== "object"){
        li = document.getElementById(li);
    }
    var ul = li.parentNode;
    // fudge adjustment for borders effect on offsetHeight
    var fudge = 4;
    // bottom most position needed for viewing
    var bottom = (ul.scrollTop + (ul.offsetHeight - fudge) - li.offsetHeight);
    // top most position needed for viewing
    var top = ul.scrollTop + fudge;
    if (li.offsetTop <= top){
        // move to top position if LI above it
        // use algebra to subtract fudge from both sides to solve for ul.scrollTop
        ul.scrollTop = li.offsetTop - fudge;
    } else if (li.offsetTop >= bottom) {
        // move to bottom position if LI below it
        // use algebra to subtract ((ul.offsetHeight - fudge) - li.offsetHeight) from both sides to solve for ul.scrollTop
        ul.scrollTop = li.offsetTop - ((ul.offsetHeight - fudge) - li.offsetHeight) ;
    }
};

答案 4 :(得分:0)

有趣的怪癖:

window.location.href = window.location.origin+window.location.pathname+window.location.search+"#343532532523"

它的作用是获取url部分并使用实际锚点将其设置回元素

如果您的网站不是网络应用程序,可能适用于大多数情况=)

编辑:现代浏览器中没有往返,更改URL的唯一部分是锚点。我对不作为webapp的考虑是这些网站通常编辑锚和历史。

答案 5 :(得分:0)

这是一个简单的演示,使用jQuery position()获取父UL中的LI位置,然后使用animate()滚动视图中的复选框

http://jsfiddle.net/qKGv8/

API参考:

http://api.jquery.com/position/ http://api.jquery.com/animate/

答案 6 :(得分:0)

promptAnswerBlock - &gt; ul元素ID

$(&#39;#promptAnswerBlock&#39;)。scrollTop($(&#39;#promptAnswerBlock&#39;)[0] .scrollHeight + 150);

150只是一个偏移值

您可以根据您的要求进行调整

相关问题