javascript - 将 jQuery 数据表 aLengthMenu 显示为 <a> 链接而不是 <select> 下拉列表

标签 javascript jquery jquery-datatables

我正在尝试使用 jQuery Datatables 插件。它拥有我想要的一切,除了在如何显示 aLengthMenu 方面没有任何灵 active 。变量。它显示在 <select> 中下拉列表很好,但我的设计不灵活,希望变量只是链接。

这是它当前的显示方式:

"aLengthMenu": [[5, 15, 30, 60, -1], [5, 15, 30, 60, "All"]]

Current view

我希望它只显示这样的链接,这样人们只需单击一个链接,它就会显示指定的金额,如下所示:

Desired dview

我知道我弄乱了 Datatables 插件的核心,更具体地说是 _fnFeatureHtmlLength功能,但如果我能在这方面得到一些帮助,那就太棒了。

最佳答案

如果不打开 jquery.dataTables.js 文件并进行编辑,就没有简单的方法可以做到这一点。 是的,您是对的...您必须编辑“_fnFeatureHtmlLength”函数。

我正在使用 jquery.dataTables.js 版本 1.9.1 转到“_fnFeatureHtmlLength”函数(在文件中搜索“function _fnFeatureHtmlLength(oSettings)”,您应该会找到它,在第 2296 行)

既然你正在编辑这个文件,我会先做一个备份。此外,注释掉您要替换的行,以便您随时可以引用它们。

编辑

function _fnFeatureHtmlLength(oSettings) {
        if (oSettings.oScroll.bInfinite) {
            return null;
        }

        /* This can be overruled by not using the _MENU_ var/macro in the language variable */
        var sName = 'name="' + oSettings.sTableId + '_length"';
        //var sStdMenu = '<select size="1" '+sName+'>';
        var sStdMenu = '';
        var i, iLen;
        var aLengthMenu = oSettings.aLengthMenu;

        if (aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' &&
                typeof aLengthMenu[1] === 'object') {
            for (i = 0, iLen = aLengthMenu[0].length; i < iLen; i++) {
                //sStdMenu += '<option value="' + aLengthMenu[0][i] + '">' + aLengthMenu[1][i] + '</option>';
                sStdMenu += '<a href="#" value="' + aLengthMenu[0][i] + '">' + aLengthMenu[1][i] + '</a>';
            }
        }
        else {
            for (i = 0, iLen = aLengthMenu.length; i < iLen; i++) {
                //sStdMenu += '<option value="' + aLengthMenu[i] + '">' + aLengthMenu[i] + '</option>';
                sStdMenu += '<a href="#" value="' + aLengthMenu[i] + '">' + aLengthMenu[i] + '</a>';
            }
        }
        //sStdMenu += '</select>';

        var nLength = document.createElement('div');
        if (!oSettings.aanFeatures.l) {
            nLength.id = oSettings.sTableId + '_length';
        }
        nLength.className = oSettings.oClasses.sLength;
        nLength.innerHTML = '<label>' + oSettings.oLanguage.sLengthMenu.replace('_MENU_', sStdMenu) + '</label>';

        /*
        * Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
        * and Stefan Skopnik for fixing the fix!
        */
        //$('select option[value="' + oSettings._iDisplayLength + '"]', nLength).attr("selected", true);

        //$('select', nLength).bind('change.DT', function (e) {
        $('a', nLength).bind('click', function (e) {
            //var iVal = $(this).val();
            e.preventDefault();
            var iVal = $(this).attr('value');

            /* Update all other length options for the new display */
            var n = oSettings.aanFeatures.l;
            for (i = 0, iLen = n.length; i < iLen; i++) {
                if (n[i] != this.parentNode) {
                    //$('select', n[i]).val(iVal);
                }
            }

            /* Redraw the table */
            oSettings._iDisplayLength = parseInt(iVal, 10);
            _fnCalculateEnd(oSettings);

            /* If we have space to show extra rows (backing up from the end point - then do so */
            if (oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay()) {
                oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength;
                if (oSettings._iDisplayStart < 0) {
                    oSettings._iDisplayStart = 0;
                }
            }

            if (oSettings._iDisplayLength == -1) {
                oSettings._iDisplayStart = 0;
            }

            _fnDraw(oSettings);
        });


        //$('select', nLength).attr('aria-controls', oSettings.sTableId);

        return nLength;
    }

我还对 datatables.css 文件进行了更改:

.dataTables_length a{
margin-right:6px;
}

但是您可以设置样式。同样在我编辑的函数中的点击事件中,您可能想要向所选的“a”标签和样式添加一个“事件”类。请记住从所有其他 'a' 中删除事件类。

我还没有完全测试这些变化,而且由于我没有编写数据表,所以我不知道这些变化是否会产生任何副作用。此外,我没有使用任何插件进行测试......所以使用风险自负!

关于javascript - 将 jQuery 数据表 aLengthMenu 显示为 <a> 链接而不是 <select> 下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12727649/

相关文章:

javascript - 无法重新初始化 JQuery DataTable

datatables - 如何在 DataTables 1.10 中使用不同的值进行排序和显示

javascript - 复选框在 gridview asp.net 中使用 Shift 键进行多项选择

javascript - 为什么表中的 valign 不能与 TEXTAREA 一起使用?

javascript - onload 在选择下拉列表中 javascript

javascript - 如何使用 jQuery 将类添加到属于现有 <li> 标记的 span 元素

javascript - Backbone.js 集合和 Tastypie 过滤器

jQuery 首先从 li 元素获取一个链接

javascript - 如何管理从多个按钮打开 "same jquery ui dialog"

javascript - DataTables.js 对包含带有整数文本的 HTML 链接的列进行排序