Javascript 向jqGrid jQuery插件添加函数
我试图向jqGrid jQuery插件添加一个名为Javascript 向jqGrid jQuery插件添加函数,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我试图向jqGrid jQuery插件添加一个名为rows的函数,但我无法确定语法。这是我的非工作版本 (function($) { $.fn.jgrid.rows = function(data) { // do something }; }); (function($) { $.fn.rows = function(data) { // do something }; }); $.jqgrid.fn.rows = function(data) { // do
rows
的函数,但我无法确定语法。这是我的非工作版本
(function($) {
$.fn.jgrid.rows = function(data) {
// do something
};
});
(function($) {
$.fn.rows = function(data) {
// do something
};
});
$.jqgrid.fn.rows = function(data) {
// do something
};
$.fn.rows = function(data) {
// do something
};
正确的语法是什么
谢谢 试试看:
$.extend($.jgrid,{
rows: function() {
// do something
}
});
您的问题的正确答案似乎有点取决于您要实现的方法
rows
。我试着猜测一下,并给出了与我对你的问题的理解相对应的实现
首先,jqGrid是jQuery插件,如果您编写
$(myselector).jqGrid('setSelection',rowid);
$('table').jqGrid('setSelection',rowid);
可以是$(myselector)
选择多个元素作为一个DOM元素。比如说
$(myselector).jqGrid('setSelection',rowid);
$('table').jqGrid('setSelection',rowid);
将尝试对页面上的所有
元素调用jqGrid方法“setSelection”。因此,这个
元素位于DOM元素数组中(它应该是
DOM元素),而不仅仅是一个元素
另一个一般性评论。有一些jQuery方法可以像
$("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid');
在“setGridParam”执行某些操作并返回this
以支持链接的情况下。其他方法不支持链接和返回方法需要返回的内容。例如,getDataIDs
返回id数组,不能用另一个jQuery方法链接getDataIDs
现在我回到你的问题上来。我最好将新方法命名为getrowsbyd
。该方法将返回包含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
defined。它主要是$.extend($.fn.jqGrid,方法)代码>。然后,由于我们实现的方法无法链接,我们定义了totalRows
变量,该变量将在稍后作为方法的结果返回。现在我们必须枚举this
中的所有对象(如上面示例中$(myselector)
或$('table')
的元素)。我们是针对this.each(function(){/*dohere*/})来实现的代码>构造。然后在循环内部,我们执行以下操作
if (!this.grid) { return; }
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
}
});
使用该语句,我们测试当前DOM元素是否具有grid
属性。它不是表
元素的标准属性,但jqGrid使用该属性扩展了表
的DOM元素。例如,通过测试,我们可以跳过未应用jqGrid
的其他table
元素(这些元素不是jqGrid)。然后我使用这个
必须是表
元素的DOM这一事实,该元素具有行
属性(请参见和),我使用它的namedItem
方法。本机实现的方法作为$(“#”+rowid)工作得更好,但也可以这样做。毕竟,我们返回数组totalRows
。如果行id为的行不在网格中,则该行将没有元素;如果该行存在,则为1。如果当前jQuery选择器选择多个作为一个网格,并且我们出现错误,并且使用相同的id包含在两个网格行中,则返回的数组的长度将大于1。所以我们可以这样使用它
var grid = $("#list");
var tr = grid.jqGrid('getRowById','1111');
alert(tr.length);
最后,我想提到的是,方法$.jgrid.extend
不仅在您想要引入新的jqGrid方法时会很有用有时已经有一些jqGrid方法,但它并不完全符合您的需要。因此,您希望修改后的方法在原始jqGrid方法的开头或结尾执行某些操作。在这种情况下,我们可以执行以下操作
if (!this.grid) { return; }
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将调用该方法,并在调用之前或之后执行一些操作