锚定到具有相同类的div

时间:2011-06-15 08:01:34

标签: jquery

我正在创建导航,但我对Jquery并不擅长。我只需要<a id="prev"><a id="next">作为链接,将浏览器带到具有相同类但不按顺序排列的上一个和下一个div。一个简单的“假”jquery锚,它使用class而不是id。

有什么想法吗?

<a name="previousDiv" id="prev">Previous</a>
<a name="nextDiv" id="next">Next</a>

<!-- Display #1 -->

<div class="display" id="first">
Content
</div>

<!-- Display #2 -->

<div class="display" >
Content
</div>

<!-- Display #3 -->

<div class="display" >
Content
</div>

这是我的代码,但它不起作用:

$(document).ready(function() {

    function linkManager() {
        var first = $('#first');
        var previous = $('#prev');
        var next = $('#next');
        if (first.prev('.display').length) {
            previous.attr('href', '#goBack');
        } else {
            previous.removeAttr('href');
        }
        if (first.next('.display').length) {
            next.attr('href', '#goForward');
        } else {
            next.removeAttr('href');
        }
    }
    function scroller() {
        var container = $('window');
        var first = $('#first');
        var cScroll = container.scrollTop();
        var paddingCompensation = parseFloat(first.css('paddingTop'));
        var cRelPos = first.position().top - (paddingCompensation * 2);
        container.animate({
            'scrollTop': cScroll + cRelPos
        }, 'slow');
        linkManager();
    }
    function attributeHandler(object, type) {
        if (object.attr('href')) {
            var active = $('#first');
            active.removeAttr('id');
            if (type == 'rew') {
                active.prev('.display').attr('id', 'highlight');
            } else if (type == 'fwd') {
                active.next('.display').attr('id', 'highlight');
            }
            scroller();
        }
    }
    $('#prev').click(function() {
        attributeHandler($(this), 'rew');
    });
    $('#next').click(function() {
        attributeHandler($(this), 'fwd');
    });
    linkManager();
})();

2 个答案:

答案 0 :(得分:0)

这是最好的服务器端实现的东西。无论如何你应该在那里制作你的分页导航;更容易访问当前页码以决定next / prev应该去哪里等等。

答案 1 :(得分:0)

刚在Webdesigners Wall找到答案:

<script type="text/javascript" src="js/jquery.scrollTo-min.js"></script>

<script type="text/javascript">
$(function() {

    function scroll(direction) {

        var scroll, i,
                positions = [],
                here = $(window).scrollTop(),
                collection = $('.post');

        collection.each(function() {
            positions.push(parseInt($(this).offset()['top'],10));
        });

        for(i = 0; i < positions.length; i++) {
            if (direction == 'next' && positions[i] > here) { scroll = collection.get(i); break; }
            if (direction == 'prev' && i > 0 && positions[i] >= here) { scroll = collection.get(i-1); break; }
        }

        if (scroll) {
            $.scrollTo(scroll, {
                duration: 750       
            });
        }

        return false;
    }

    $("#next,#prev").click(function() {        
        return scroll($(this).attr('id'));        
    });

    $(".scrolltoanchor").click(function() {
        $.scrollTo($($(this).attr("href")), {
            duration: 750
        });
        return false;
    });

});
</script>