0

我正在尝试创建自己的分页插件,但遇到了一个问题: slice() 返回零结果。不知道为什么会发生这种情况,因为第一组结果很好。你们能帮忙吗?

这是HTML:

<table class="pagination">
    <thead>
        <tr>
            <td>ID</td>
            <td>First name</td>
            <td>Last name</td>
            <td>Age</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>John</td>
            <td>Smith</td>
            <td>24</td>
        </tr>
        <tr>
            <td>2</td>
            <td>Mike</td>
            <td>Lee</td>
            <td>22</td>
        </tr>
        <tr>
            <td>3</td>
            <td>Matthew</td>
            <td>McGyver</td>
            <td>32</td>
        </tr>
        <tr>
            <td>4</td>
            <td>Lucas</td>
            <td>Pereira</td>
            <td>17</td>
        </tr>
        <tr>
            <td>5</td>
            <td>Miltiades</td>
            <td>Rochester</td>
            <td>52</td>
        </tr>
        <tr>
            <td>6</td>
            <td>Horace</td>
            <td>Evans</td>
            <td>64</td>
        </tr>
        <tr>
            <td>7</td>
            <td>Anthony</td>
            <td>Briggs</td>
            <td>28</td>
        </tr>
        <tr>
            <td>8</td>
            <td>Raymond</td>
            <td>Mercer</td>
            <td>34</td>
        </tr>
        <tr>
            <td>9</td>
            <td>Richard</td>
            <td>Tex-Tex</td>
            <td>32</td>
        </tr>
        <tr>
            <td>10</td>
            <td>Ryu</td>
            <td>Hayabusa</td>
            <td>27</td>
        </tr>
        <tr>
            <td>11</td>
            <td>Zacariah</td>
            <td>Beckett</td>
            <td>20</td>
        </tr>
        <tr>
            <td>12</td>
            <td>Jerome</td>
            <td>Coles</td>
            <td>29</td>
        </tr>
        <tr>
            <td>13</td>
            <td>Mark</td>
            <td>Smith</td>
            <td>43</td>
        </tr>
        <tr>
            <td>14</td>
            <td>Robert</td>
            <td>Pershing</td>
            <td>44</td>
        </tr>
    </tbody>
</table>

这是 JavaScript(使用 jQuery 1.10.1):

(function ($) {
    $.fn.pager = function (params) {
        var settings = $.extend({
            table: $(this).find("tbody"),
            pageSize: 5,
            currentPage: 0,
            totalPages: 0
        }, params);

        // Calculate total pages
        settings.totalPages = Math.round($(this).find("tbody tr").size() / settings.pageSize);

        var bar = $("<div></div>");
        var firstPage = $("<a href=\"#\">&lt;&lt;</a>");
        $(firstPage).on("click", function (event) {
            settings.currentPage = 0;
            drawWindow(settings);
            $(firstPage).attr('disabled', true);
            $(previousPage).attr('disabled', true);

            return false;
        });

        var previousPage = $("<a href=\"#\">&lt;</a>");
        $(previousPage).on("click", function (event) {
            if (settings.currentPage > 0) {
                settings.currentPage--;
            } else {
                $(firstPage).attr('disabled', true);
                $(previousPage).attr('disabled', true);
            }

            drawWindow(settings);

            return false;
        });

        var nextPage = $("<a href=\"#\">&gt;</a>");
        $(nextPage).on("click", function (event) {
            if (settings.currentPage < (settings.totalPages - 1)) {
                settings.currentPage++;
            } else {
                $(firstPage).attr('disabled', false);
                $(previousPage).attr('disabled', false);
                $(nextPage).attr('disabled', true);
                $(lastPage).attr('disabled', true);
            }

            drawWindow(settings);

            return false;
        });

        var lastPage = $("<a href=\"#\">&gt;&gt;</a>");
        $(lastPage).on("click", function (event) {
            settings.currentPage = settings.totalPages - 1;

            $(firstPage).attr('disabled', false);
            $(previousPage).attr('disabled', false);
            $(nextPage).attr('disabled', true);
            $(lastPage).attr('disabled', true);

            drawWindow(settings);

            return false;
        });

        $(bar).append(firstPage);
        $(bar).append(previousPage);
        $(bar).append(nextPage);
        $(bar).append(lastPage);
        $(this).append(bar);

        drawWindow(settings);
        $(firstPage).attr('disabled', true);
        $(previousPage).attr('disabled', true);
    };

    function drawWindow(settings) {
        var window = settings.pageSize;
        var start = settings.currentPage * window;

        alert("Start " + start);
        // To do: Why zero when start is 5 and window is 5?
        alert("Records " + settings.table.find("tr").slice(start, window).size());
        // Show only required results
        $(settings.table.find("tr")).not($(settings.table.find("tr")).slice(start, window)).hide();
    }
}(jQuery));

$(".pagination").pager();

谢谢!

4

1 回答 1

0

我注意到了几件事。

首先,我认为您的设置计算settings.currentPage是错误的。最初currentPage0. 如果您单击一次箭头以在数据集中移动,则它currentPage2,而不是1它应该是的。

其次,这是您的代码在“第二”页上尝试执行的操作。

settings.table.find("tr").slice(10, 5)

这不会返回任何内容,因为您尝试从 10 开始并返回到 5,而 slice 不能那样工作。因此,计算出需要更改哪些变量才能使其正常工作。

最后,将变量分配给window,即使它是一个局部变量,充其量也是不稳定的,您需要改掉这样做的习惯。

希望这可以帮助。

于 2013-09-17T15:04:05.367 回答