似乎對你的問題的正確答案取決於從什麼應該做,你要實現的方法rows
一點。我嘗試猜測一點,並給出與我對你的問題的理解相對應的實現。
所有的jqGrid首先是jQuery插件和如果寫例如
$(myselector).jqGrid('setSelection',rowid);
它可以是$(myselector)
選擇更爲一個DOM元素。例如
$('table').jqGrid('setSelection',rowid);
會嘗試調用的jqGrid方法「爲setSelection」頁面上的所有<table>
元素。所以DOM元素數組中的元素(它應該是<table>
DOM元素),而不僅僅是一個元素。
另一個一般的評論。有可捆綁,像
$("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid');
在這種情況下的「setGridParam做某些事情並返回this
支持鏈接jQuery方法。其他方法不支持鏈接並返回該方法需要返回的內容。例如getDataIDs
返回一個ID數組,而另一個不能使用另一個jQuery方法鏈接getDataIDs
。
現在我回到你的問題。我會更好地命名新方法getRowsById
。該方法將返回包含表示<tr>
(錶行)的DOM元素的數組。該方法將有rowid
作爲參數。然後一個可以在方法的新方法延伸的jqGrid:
$.jgrid.extend({
getRowsById: function (rowid){
var totalRows = [];
// enum all elements of the jQuery object
this.each(function(){
if (!this.grid) { return; }
// this is the DOM of the table
// we
var tr = this.rows.namedItem(rowid);
if (tr !== null) { // or if (tr !== null)
totalRows.push(tr);
}
});
return totalRows;
}
});
首先我在示例$.jgrid.extend
定義here所述方法使用的。它主要是$.extend($.fn.jqGrid,methods);
。然後,因爲我們實現的方法不能被鏈接,所以我們定義了totalRows
變量,這個變量將在後面作爲方法的結果返回。現在我們必須列舉來自this
的所有對象(如上例中的$(myselector)
或$('table')
的元素)。我們在this.each(function(){/*do here*/});
構造上做到這一點。然後循環內我們就以下
if (!this.grid) { return; }
隨着我們測試當前的DOM元素是否具有grid
屬性的語句。它不是table
元素的標準屬性,但jqGrid使用屬性擴展了table
的DOM元素。通過測試,我們可以跳過其他table
元素,其中jqGrid
未應用(不是jqGrid)。然後我使用this
必須是具有rows
屬性(請參閱here和here)的table
元素的DOM,並使用其namedItem
方法。本地實現的方法比$(「#」+ rowid)效果更好,但是執行方式相同。畢竟我們返回數組totalRows
。如果行ID不在網格中,那麼它將沒有元素,如果它存在,則爲1。如果當前的jQuery選擇更多的選擇爲一個網格,我們有一個錯誤,包括在兩個網格行具有相同id返回的數組將具有更大的長度爲1。因此,我們可以用它使
var grid = $("#list");
var tr = grid.jqGrid('getRowById','1111');
alert(tr.length);
在結束我想提一下,不僅如果你想引入新的jqGrid方法,方法$.jgrid.extend
可能會有所幫助。 有時候已經有一些jqGrid方法,但它並不完全是你需要的。所以你希望修改後的方法在原始jqGrid方法的開始處或末尾處執行某些操作。在這種情況下,我們可以做以下
var oldEditCell = $.fn.jqGrid.editCell;
$.jgrid.extend({
editCell: function (iRow,iCol, ed){
var ret;
// do someting before
ret = oldEditCell.call (this, iRow, iCol, ed);
// do something after
return ret; // return original or modified results
}
});
在我們覆蓋原來editCell
法會的jqGrid本身被稱爲榜樣,號召後,一些之前做一些事情。