jqGrid GridUnload / GridDestroy

当我使用$('#mygrid').jqGrid('GridUnload'); 我的网格被破坏:没有传呼机/没有标题。

在一个wiki中,我发现:

与以前的方法唯一的区别是网格被破坏,但表格元素和传呼机(如果有的话)已准备好再次使用。

我找不到GridUnload / GridDestroy之间的任何区别,或者我有什么问题吗?

我使用jqGrid 3.8。

为了能够在页面上创buildjqGrid,你必须在你想要看到网格的页面的位置插入一个空的<table>元素。 表元素最简单的例子是<table id="mygrid"></table>

在调用$('#mygrid').jqGrid({...}) ,空的<table>元素本身不会在页面上出现 ,像列标题这样的网格元素将被创build。

方法GridDestroy像jQuery.remove一样工作 。 它删除属于网格的所有元素包含<table>元素。

另一方面GridUnload方法删除所有,但空的<table>元素留在页面上 。 所以你可以在同一个地方创build新的网格。 GridUnload方法非常有用,如果您需要在一个地方创build不同的网格取决于不同的条件。 看演示 的旧答案 。 演示显示了如何在同一个地方dynamic创build两个不同的网格。 如果你只是将代码中的GridDestroyreplace为GridDestroy则演示将不起作用:在销毁第一个网格之后,不会在同一个地方创build其他网格。

除了Oleg的回答之外,我想指出的是,GridUnload做的更多,只是从表中删除网格。 它删除了原始的HTML表格元素(和寻呼机),并在它的位置上广告一个相同的(至less在4.5.4中)。

这意味着,如果你附加了一些事件处理程序到表格HTML元素(即使用jquery on,就像('#gridID')。on('event','selector',handler)),它们也将被删除。 奇怪的事件不会触发新的电网,如果你更换一个新的旧电网…

只要我没有组头,奥列格的答案对我来说工作得很好。

当我添加组标题行'setGroupHeaders'

'GridUnload'后跟$('#mygrid')。jqGrid({…})的结果并不一致。

它在Chrome中正常工作,但不在IE11中。

在IE11中,每个“jqg-third-row-header”项目都在不同的行(对angular线)上呈现。

我正在使用free-jqGrid:query.jqgrid.src.js版本4.13.4进行debugging。 我把这个问题追溯到代码,在这个文件中,以9936行开头:

 if (o.useColSpanStyle) { // Increase the height of resizing span of visible headers $htable.find("span.ui-jqgrid-resize").each(function () { var $parent = $(this).parent(); if ($parent.is(":visible")) { this.style.cssText = "height:" + $parent.height() + "px !important; cursor:col-resize;"; //this.style.cssText = "height:" + $parent.css('line-height'); + "px !important;cursor:col-resize;"; } }); // Set position of the sortable div (the main lable) // with the column header text to the middle of the cell. // One should not do this for hidden headers. $htable.find(".ui-th-column>div").each(function () { var $ts = $(this), $parent = $ts.parent(); if ($parent.is(":visible") && $parent.is(":has(span.ui-jqgrid-resize)") && !($ts.hasClass("ui-jqgrid-rotate") || $ts.hasClass("ui-jqgrid-rotateOldIE"))) { // !!! it seems be wrong now $ts.css("top", ($parent.height() - $ts.outerHeight(true)) / 2 + "px"); // $ts.css("top", ($parent.css('line-height') - $ts.css('line-height')) / 2 + "px"); } }); } $(ts).triggerHandler("jqGridAfterSetGroupHeaders"); }); 

此代码设置与每个“jqg-third-row-header”项目相关的高度和顶部CSS值。 这导致了'jqg-third-row-header'的高度和对angular布局,
潜在的错误:

上面的$ parent.height()和$ ts.height()方法返回IE11中以前的jqGrid表格高度。 在Chrome中,它们返回“th”计算的高度(top = 0)。 我添加并testing了2条使用行高的注释行。 当使用行高时,IE11可以正常工作。 我不完全了解JqGridresize的逻辑,所以这可能不是一个修复。
备用解决scheme:

如果你指定。

  colModel: { label: 'D', name: 'W', width: 6, align: 'center', resizable:false //required for IE11 multiple calls to this init() }, 

如果可resize为false,则不会遇到上面的代码,并且未设置高度和顶部。
奥列格的jqGrid是一个非常好的控制。 也许他可以在IE11上用groupheadertesting他的演示网格。