表格排序分页插件

使用方法:
$(function() {
    $("#exampletable").slimtable();
});

来源:http://slimtable.mcfish.org/

修正tr带data-id : slimtable.min.js

/**
 * SlimTable
 * http://slimtable.mcfish.org/
 *
 * Licensed under MIT license.
 *
 * Date: 28 / 07 / 2013
 * @version 1.1.1
 * @author Pekka Harjamäki
 */
(function (e) {
    e.fn.slimtable = function (t) {
        function c(t) {
            var r,
            i,            
            s = document.createElement("select");
            r = document.createElement("div"),
            e(r).addClass("slimtable-paging-div");
            for (var o = 0; o < n.ipp_list.length; o++) {
                var u = document.createElement("option");
                u.value = n.ipp_list[o],
                u.text = n.ipp_list[o],
                u.value == n.itemsPerPage && (u.selected = !0),
                e(s).append(u)
            }
            e(s).on("change", m),
            e(s).addClass("slimtable-paging-select"),
            i = document.createElement("div"),
            e(i).addClass("slimtable-paging-btnsdiv"),
            e(r).append(i),
            a = i,
            i = document.createElement("div"),
            e(i).addClass("slimtable-paging-seldiv"),
            e(i).append(s),
            e(i).append("items/page"),
            e(r).append(i),
            i = document.createElement("div"),
            e(i).addClass("slimtable-container-div"),
            e(i).append(r),
            t.before(i),
            t.insertBefore(r)
        }
        function h() {
            o.find("th").each(function (t) {
                e(this).attr("unselectable", "on");
                if (r[t] && r[t].sortable) {
                    var n = document.createElement("span");
                    titlebackground==0?e(n).addClass("slimtable-sprites"):e(n).addClass("slimtable-sprites2"),
                    e(n).attr("unselectable", "on"),
                    r[t].sordir == "asc" ? e(n).addClass("slimtable-sortasc") : r[t].sordir == "desc" ? e(n).addClass("slimtable-sortdesc") : e(n).addClass("slimtable-sortboth"),
                    e(this).append(n).css({
                        cursor : "pointer"
                    }).on("click", g)
                }
            })
        }
        function p() {
            var t = o.find("th");
            r = new Array;
            for (var i = 0; i < t.length; i++) {
                var a = !0,
                f = [];
                for (var l = 0; l < n.colSettings.length; l++)
                    if (n.colSettings[l].colNumber == i) {
                        n.colSettings[l].enableSort == 0 && (a = !1),
                        n.colSettings[l].addClasses && n.colSettings[l].addClasses.length > 0 && (f = n.colSettings[l].addClasses);
                        break
                    }
                r[i] = {
                    sortable : a,
                    classes : f,
                    sortdir : "asc"
                }
            }
            !n.tableData || n.tableData.length <= 0 ? u.find("tr").each(function () {
                var t = new Array;            
                e(this).find("td").each(function () {
                    t.push(e(this).html())
                }),
                s.push(t);
                sd.push(e(this)[0].dataset);
            }) : s = n.tableData
        }
        function d() {
            var t = parseInt(f) + parseInt(l),
            n,
            i,
            o;
            u.empty(),
            t = t > s.length ? s.length : t;
            for (var c = f; c < t; c++) {
                n = document.createElement("tr");                
                for (var h = 0; h < s[c].length; h++) {
                    i = document.createElement("td"),
                    e(i).html(s[c][h]);
                    for (var p = 0; p < r[h].classes.length; p++)
                        e(i).addClass(r[h].classes[p]);
                    e(n).append(i)
                }
                //console.log(sd[c]);
                //n[0].dataset=sd[c];
                //console.log(n,typeof(n));
                n.setAttribute("data-id",sd[c].id);
                u.append(n)
            }
            e(a).empty(),
            o = Math.ceil(s.length / l);
            for (var c = 0; c < o; c++)
                n = document.createElement("div"), e(n).addClass("slimtable-page-btn"), e(n).on("click", v), e(n).text(c + 1), c * l == f && e(n).addClass("active"), e(a).append(n)
        }
        function v(t) {
            var n = parseInt(e(this).text()) - 1,
            r = Math.ceil(s.length / l);
            if (n < 0 || n >= r)
                return;
            f = n * l,
            d()
        }
        function m(e) {
            var t = this.value;
            l = this.value,
            f = 0,
            d()
        }
        function g(t) {
            var n = e(this).index(),
            u,
            a,
            f = e.inArray(n, i);
            t.preventDefault(),
            t.shiftKey ? f < 0 ? (i.push(n), r[n].sortdir = "asc") : r[n].sortdir == "asc" ? r[n].sortdir = "desc" : r[n].sortdir = "asc" : (i = [n], f < 0 ? r[n].sortdir = "asc" : r[n].sortdir == "asc" ? r[n].sortdir = "desc" : r[n].sortdir = "asc");
            for (var l = 0; l < r.length; l++) {
                if (!r[l] || !r[l].sortable)
                    continue;
                u = o.find("th:nth-child(" + (l + 1) + ")"),
                a = u.find("span"),
                e.inArray(l, i) < 0 ? (u.removeClass("slimtable-activeth"), a.removeClass("slimtable-sortasc"), a.removeClass("slimtable-sortdesc"), a.addClass("slimtable-sortboth")) : (a.removeClass("slimtable-sortboth"), a.removeClass("slimtable-sort" + (r[l].sortdir == "asc" ? "desc" : "asc")), a.addClass("slimtable-sort" + r[l].sortdir), u.addClass("slimtable-activeth"))
            }
            i.length > 0 && s.sort(function (e, t) {
                var n,
                s;
                for (var o = 0; o < i.length; o++)
                    return n = i[o], e[n] == t[n] && o < i.length - 1 ? (s = i[o + 1], y(e[s], t[s], r[s].sortdir)) : y(e[n], t[n], r[n].sortdir)
            }),
            d()
        }
        function y(e, t, n) {
            var r = /[^0-9]/g,
            i = /[^0-9,\.]/g,
            s = /^([0-9]+([\.,][0-9]+)?)\s*[%$€£e]?$/,
            o,
            u;
            return r.test(e) ? i.test(e) ? s.test(e) ? (o = RegExp.$1, s.test(t), u = RegExp.$1, b(o, u, n)) : E(e, t, n) : b(e, t, n) : w(e, t, n)
        }
        function b(e, t, n) {
            var r = parseFloat(e.replace(",", ".")),
            i = parseFloat(t.replace(",", "."));
            return n == "asc" ? r - i : i - r
        }
        function w(e, t, n) {
            return n == "asc" ? e - t : t - e
        }
        function E(e, t, n) {
            var r = new String(e.toLowerCase()),
            i = new String(t.toLowerCase());
            return n == "asc" ? r.localeCompare(i) : i.localeCompare(r)
        }
        var n = e.extend({
                tableData : null,
                itemsPerPage : 10,
                ipp_list : [5, 10, 20],
                colSettings : [],
                titlebackground:0
            }, t),
        r = [],
        i = [],
        s = [],
        sd=[],
        titlebackground,
        o,
        u,
        a,
        f,
        l;
        return this.each(function () {
            f = 0,
            l = n.itemsPerPage,
            titlebackground=n.titlebackground;
            o = e(this).find("thead"),
            u = e(this).find("tbody");
            if (o.length == 0 || u.length == 0) {
                console.log("Slimtable: thead/tbody missing from table!");
                return
            }
            p();
            if (s.length > 0 && r.length != s[0].length) {
                console.log("Slimtable: Different number of columns in header and data!", r, s);
                return
            }
            h(),
            e(this).addClass("slimtable"),
            c(e(this)),
            d()
        })
    }
})(jQuery);

 

posted @ 2018-04-09 10:34  KJXY  阅读(118)  评论(0)    收藏  举报