解决bootstrap-table表头与数据不对齐的问题

使用bootstrap-table的时候,有时发现表头与数据不对齐的问题,特别是列很多或者浏览器有缩放时比较明显。
查看源码bootstrap-table.js你会发现,表头是根据tbody的第一行的每一个元素的innerWidth()来定宽度的,然而检查元素发现,innerWidth()总取整数,而忽略的实际的小数点,导致列越多,表头偏移得越明显,修改源码(将innerWidth()用getBoundingClientRect().width来代替即可,大概是15281537行左右):

    e.prototype.fitHeader = function () {
        var t = this, u, r, x, y;
        if (t.$el.is(":hidden")) {
            t.timeoutId_ = setTimeout(j.proxy(t.fitHeader, t), 100);
            return
        }
        u = this.$tableBody.get(0);
        r = u.scrollWidth > u.clientWidth && u.scrollHeight > u.clientHeight + this.$header.outerHeight() ? a() : 0;
        this.$el.css("margin-top", -this.$header.outerHeight());
        x = j(":focus");
        if (x.length > 0) {
            var z = x.parents("th");
            if (z.length > 0) {
                var A = z.attr("data-field");
                if (A !== undefined) {
                    var s = this.$header.find("[data-field='" + A + "']");
                    if (s.length > 0) {
                        s.find(":input").addClass("focus-temp")
                    }
                }
            }
        }
        this.$header_ = this.$header.clone(true, true);
        this.$selectAll_ = this.$header_.find('[name="btSelectAll"]');
        this.$tableHeader.css({"margin-right": r}).find("table").css("width", this.$el.outerWidth()).html("").attr("class", this.$el.attr("class")).append(this.$header_);
        y = j(".focus-temp:visible:eq(0)");
        if (y.length > 0) {
            y.focus();
            this.$header.find(".focus-temp").removeClass("focus-temp")
        }
        this.$header.find("th[data-field]").each(function (B) {
            t.$header_.find(m('th[data-field="%s"]', j(this).data("field"))).data(j(this).data())
        });
        var w = this.getVisibleFields(), v = this.$header_.find("th");
        this.$body.find(">tr:first-child:not(.no-records-found) > *").each(function (C) {
            var E = j(this), B = C;
            if (t.options.detailView && !t.options.cardView) {
                if (C === 0) {
                    //t.$header_.find("th.detail").find(".fht-cell").width(E.innerWidth())
                    t.$header_.find("th.detail").find(".fht-cell").width(E[0].getBoundingClientRect().width)
                }
                B = C - 1
            }
            var D = t.$header_.find(m('th[data-field="%s"]', w[B]));
            if (D.length > 1) {
                D = j(v[E[0].cellIndex])
            }

            D.find(".fht-cell").width(E[0].getBoundingClientRect().width)
            //D.find(".fht-cell").width(E.innerWidth())
        });
        this.$tableBody.off("scroll").on("scroll", function () {
            t.$tableHeader.scrollLeft(j(this).scrollLeft());
            if (t.options.showFooter && !t.options.cardView) {
                t.$tableFooter.scrollLeft(j(this).scrollLeft())
            }
        });
        t.trigger("post-header")
    };

你可能感兴趣的:(前端)