Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向jqGrid jQuery插件添加函数_Javascript_Jquery_Jqgrid - Fatal编程技术网

Javascript 向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

我试图向jqGrid jQuery插件添加一个名为
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将调用该方法,并在调用之前或之后执行一些操作