如何使用jQuery jScroll滚动表行?

问题描述 投票:0回答:1

jQuery jscroll并没有很多有用的示例,事实上,它默认情况下不适用于表行,因为它将结果放入div元素中,这会破坏表。

我有这个HTML模板

<table class="table responsive-table-list">
    <thead>
        <tr>
            <th>label 1</th>
            <th>label 2</th>
            <th>label 3</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>data 1.1</td>
            <td>data 1.2</td>
            <td>data 1.3</td>
        </tr>
        <tr>
            <td>data 2.1</td>
            <td>data 2.2</td>
            <td>data 2.3</td>
        </tr>
    <tbody>
</table>

如何使其可jScrollable?

jquery-plugins jquery-jscroll
1个回答
0
投票

您需要自己的控制器来提供数据。这不是此解决方案的一部分。在这种情况下,输出必须是HTML,并且必须包含表的后X行。

HTML模板包含一个额外的div。下一页链接(指向控制器)被添加为新行。 jscroll将删除ATD标签,但不会删除TR,因为它不知道。我们必须稍后再做,否则空的TR标签会破坏HTML。我在auto-trigger参数中传递了loading-htmldata,可以从javascript代码中进行访问。我在nextPageLoad标记中使用A类,这有助于我识别与jscroll相关的链接。

<div class="jscroll" data-auto-trigger="true" data-loading-html="Loading..">
    <table class="table responsive-table-list">
        <thead>
        <tr>
            <th>label 1</th>
            <th>label 2</th>
            <th>label 3</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td>data 1.1</td>
            <td>data 1.2</td>
            <td>data 1.3</td>
        </tr>
        <tr>
            <td>data 2.1</td>
            <td>data 2.2</td>
            <td>data 2.3</td>
        </tr>
        <tr>
            <td colspan="3">
                <a href="/link-to-action-for-the-next-rows" class="nextPageLoad">Next page</a>
            </td>
        </tr>
        <tbody>
    </table>
</div>

JavaScript代码。调试已激活!

var EndlessScroll = (function ($) {

    function init() {
        var $scrollEl = $('.jscroll');
        var autoTrigger = $scrollEl.data('auto-trigger');
        var loadingHtml = $('<span>');
        loadingHtml.text($scrollEl.data('loading-html'));

        $scrollEl.jscroll({
            loadingHtml: loadingHtml[0].outerHTML,
            padding: 20,
            autoTrigger: autoTrigger,
            nextSelector: '.nextPageLoad',
            callback: function (data) {
                var $table = $('.jscroll table tbody');

                // moves the new elements from the jscroll div to the table
                $('.jscroll-added tr').appendTo($table);

                // removes the empty tr encapsulated the jscroll pagination
                var rows = $table.find('tr');
                rows.each(function(idx, el){
                    if ($(el).children().length === 0) {
                        $(el).remove();
                    }
                });
            },
            debug: true
        });
    }


    return {
        init: init
    };
})(jQuery);

$(EndlessScroll.init);
© www.soinside.com 2019 - 2024. All rights reserved.