使用.eq()在div中定位div

时间:2012-02-06 19:11:31

标签: jquery html

对jquery很新,但我希望能够在div中定位div。

我目前正在使用它:

var items = $('#menu li').click(function() {

    var index = items.index(this);
    $(window).scrollTo(('#holder').eq(index), 800); 
});

和持有人看起来像这样

<div id="holder">

<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item test"></div>

但由于某些原因,id似乎并不针对任何一个div。或者至少滚动不会对它们起作用。有人可以建议吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

在代码中选择$时,您遗漏了#holder,可能会出现语法错误。试试这个。

var items = $('#menu li').click(function() {

    var index = items.index(this);
    $(window).scrollTo($('#holder').eq(index), 800); 

    //You can also use $(this).index()
    $(window).scrollTo($('#holder').eq($(this).index()), 800); 
});

答案 1 :(得分:1)

$('#holder')指的是一个元素。 $('#holder > div')指的是#holder的所有孩子,因此您可能希望这样做:

var items = $('#menu li').click(function() {

var index = items.index(this);
    $(window).scrollTo($('#holder > div').eq(index), 800);   
});

您还可以使用$('#holder > .item')$('#holder').children()$('#holder').children('.item')

答案 2 :(得分:1)

您的代码中有几处错误。正如ShankarSangoli所说,您需要向$添加('#holder')以使其成为jQuery对象:$('#holder')

同样$('#holder').eq(index)正在选择当前索引的#holder元素,但您想要选择#holder元素的子元素。试试这个:$('#holder').children().eq(index)

这是您的代码的工作版本。注意我使用了.animate()函数(在html / body元素上调用,因为那些是实际滚动的元素,这取决于所使用的浏览器):

var items = $('#menu').children().click(function() {
    $('html, body').animate({ scrollTop : $('#holder').children().eq($(this).index()).offset().top }, 800);
});

以下是演示:http://jsfiddle.net/fCnM5/

另请注意,要获取所单击菜单项的索引,您只需使用$(this).index(),因为.index()函数将根据其兄弟姐妹获取当前选择的索引。