Jqgrid可编辑列宽根据其内容

时间:2014-11-05 06:40:26

标签: jquery html css jqgrid width

我已将Oleg提供的代码包含在此link中。它可以完美地根据内容设置列的大小。我现在面临的唯一问题就是当我设置&#34; editble:true&#34;对于列值,跨度也会随元素一起显示。此跨度已添加到单个单元格中以获取单元格中存在的文本的宽度。现在要编辑coloumn,显示的列值为:< / p>

  

<span class="mywrapping">text</span>

请帮忙。

1 个答案:

答案 0 :(得分:2)

你是对的。现在在我看来,我将更有效地包括<span>只是暂时来测量单元格的宽度。在这种情况下,包装跨度不会停留在单元格中,并且您所描述的问题似乎不会更多。

The demo提供了实施的修改版本&#34; autowidth&#34;网格中的行为。它使用以下代码

var autosizeColumn = function (iCol) {
        var $this = $(this), iRow, rows, row, colWidth,
            cm = typeof iCol === "string" ? $this.jqGrid("getColProp", iCol) : $this.jqGrid("getGridParam", "colModel")[iCol],
            getOuterWidth = function ($elem) {
                var $wrappingSpan, width;

                $elem.wrapInner("<span class='mywrapping'></span>");
                $wrappingSpan = $elem.find(">.mywrapping");
                width = $wrappingSpan.outerWidth();
                $elem.html($wrappingSpan.html());

                return width;
            };

        if (cm == null || cm.hidden) {
            return; // don't change the width of hidden columns
        }
        colWidth = getOuterWidth($(this.grid.headers[iCol].el).find(">div")) + 25; // 25px for sorting icons
        for (iRow = 0, rows = this.rows; iRow < rows.length; iRow++) {
            row = rows[iRow];
            if ($(row).hasClass("jqgrow")) {
                colWidth = Math.max(colWidth, getOuterWidth($(row.cells[iCol])));
            }
        }
        $this.jqGrid("setColWidth", iCol, colWidth);
    },
    autosizeColumns = function () {
        var $this = $(this), iCol,
            colModel = $this.jqGrid("getGridParam", "colModel"),
            n = $.isArray(colModel) ? colModel.length : 0;

        for (iCol = 0; iCol < n; iCol++) {
            autosizeColumn.call(this, iCol);
        }
    };

$grid.bind("jqGridAfterLoadComplete jqGridRemapColumns jqGridInlineAfterSaveRow", autosizeColumns);

<强>已更新即可。或者,可以使用我autoWidthColumns here发布的jQuery.jqGrid.addColumn.js插件。在这种情况下,只需要包含jQuery.jqGrid.setColWidth.jsjQuery.jqGrid.autoWidthColumns.js,并使用$("#gridid").jqGrid("autoWidthColumns").jqGrid({/*option*/});而不是标准$("#gridid").jqGrid({/*option*/});创建网格。

The demo使用autoWidthColumns插件。