JS分页首页<a> active class

时间:2017-02-22 21:10:06

标签: javascript css

I have this JS pagination code that works almost like I want it to, except from that I want the selected-page class to be added to the first page number <a> before it is clicked? Now it is only added after the current page is clicked.

(function($) {
    $(function() {
        $.widget("zpd.paging", {
            options: {
                limit: 5,
                rowDisplayStyle: 'block',
                activePage: 0,
                rows: []
            },
            _create: function() {
                var rows = $("tbody", this.element).children();
                this.options.rows = rows;
                this.options.rowDisplayStyle = rows.css('display');
                var nav = this._getNavBar();
                this.element.after(nav);
                this.showPage(0);
            },
            _getNavBar: function() {
                var rows = this.options.rows;
                var nav = $('<div>', {class: 'paging-nav'});
                for (var i = 0; i < Math.ceil(rows.length / this.options.limit); i++) {
                    this._on($('<a>', {
                        href: '#',
                        text: (i + 1),
                        "data-page": (i)
                    }).appendTo(nav),
                            {click: "pageClickHandler"});
                }
                //create previous link
                this._on($('<a>', {
                    href: '#',
                    text: '<<',
                    "data-direction": -1
                }).prependTo(nav),
                        {click: "pageStepHandler"});
                //create next link
                this._on($('<a>', {
                    href: '#',
                    text: '>>',
                    "data-direction": +1
                }).appendTo(nav),
                        {click: "pageStepHandler"});
                return nav;
            },
            showPage: function(pageNum) {
                var num = pageNum * 1; //it has to be numeric
                this.options.activePage = num;
                var rows = this.options.rows;
                var limit = this.options.limit;
                for (var i = 0; i < rows.length; i++) {
                    if (i >= limit * num && i < limit * (num + 1)) {
                        $(rows[i]).css('display', this.options.rowDisplayStyle);
                    } else {
                        $(rows[i]).css('display', 'none');
                    }
                }
            },
            pageClickHandler: function(event) {
                event.preventDefault();
                $(event.target).siblings().attr('class', "");
                $(event.target).attr('class', "selected-page");
                var pageNum = $(event.target).attr('data-page');
                this.showPage(pageNum);
            },
            pageStepHandler: function(event) {
                event.preventDefault();
                //get the direction and ensure it's numeric
                var dir = $(event.target).attr('data-direction') * 1;
                var pageNum = this.options.activePage + dir;

                //if we're in limit, trigger the requested pages link
                if (pageNum >= 0 && pageNum < this.options.rows.length) {
                    $("a[data-page=" + pageNum + "]", $(event.target).parent()).click();
                }



            }
        });
    });
})(jQuery);

3 个答案:

答案 0 :(得分:2)

如果没有您的HTML,我无法告诉您一个开箱即用的解决方案。但是,您可以编写jQuery:

 $("a:first-child").addClass("selected-page");

或其他类似的选择器。

答案 1 :(得分:1)

我认为您可以在创建页面链接时执行此操作

  $('<a>', {
    href: '#',
    text: (i + 1),
    "data-page": (i),
    "class": i == 0 ? "selected-page" : "" <----- ADD THIS
  })

答案 2 :(得分:1)

在您的_create功能中,您显示的是第0页。

this.showPage(0);

您可以使用第一个<a>

上的程序化点击来替换它
$("a[data-page='0']").click();

或只是为其添加类名,而不是单击:

$("a[data-page='0']").addClass("selected-page");