发现实际页面内部是不是有 jqGrid 对象

Posted

技术标签:

【中文标题】发现实际页面内部是不是有 jqGrid 对象【英文标题】:Discover if the actual page has a jqGrid object inside发现实际页面内部是否有 jqGrid 对象 【发布时间】:2011-09-13 13:22:28 【问题描述】:

标题中的问题几乎完成了:有什么方法可以使用 jquery 来查找 jqGrid 对象处理的元素?

更准确地说,我希望在网格上调用一个 reload 方法,如果页面上存在一个。 我正在使用以下代码

...
success: function (data) 
    //Check if there is a jqGrid on the page and if present, reloads its data
    var jqGrid = $('.ui-jqgrid');
    if ( jqGrid.length ) 
        //get the grid id. The actual id object is in the form of "gbox_your_grid_id"
        var gridid = "#" + jqGrid.attr('id').substring(5);
        //time to reload
        $(grid).trigger('reloadGrid');
    

但似乎从未调用过 reloadGrid 方法。有什么建议吗?

【问题讨论】:

【参考方案1】:

很难提出任何完美的测试。例如,您可以尝试搜索“gbox”:$('div.ui-jqgrid') - 它是一个包含 jqGrid 的所有组件的 div。如果$('div.ui-jqgrid').length > 0 则页面上至少存在网格。

你可以在bdiv里面搜索table元素:

$('div.ui-jqgrid-bdiv table').length > 1

甚至为

if ($('div.ui-jqgrid > div.ui-jqgrid-view > div.ui-jqgrid-bdiv > div > table.ui-jqgrid-btable').length > 1) 
    // jqGrid exist

(详见here)。此外,您可以测试此类表格元素是否具有jqGrid 方法:

if ($.isFunction($('div.ui-jqgrid > div.ui-jqgrid-view > div.ui-jqgrid-bdiv > div > table.ui-jqgrid-btable').jqGrid)) 
    // jqGrid exist

【讨论】:

谢谢。我已根据您的建议编辑了我的问题以添加更多详细信息。你能看一下吗? @Lorenzo:不准确。 $('.ui-jqgrid') 不是 <table> 元素。所以你应该至少使用var jqGrid = $('div.ui-jqgrid-bdiv table');或更准确的var jqGrid = $('div.ui-jqgrid > div.ui-jqgrid-view > div.ui-jqgrid-bdiv > div > table.ui-jqgrid-btable');。您无需使用和var gridid,只需调用jqGrid.trigger('reloadGrid',[page:1])。见here。 @Lorenzo:您可以先找到 gbox,然后获取 id 的最后一部分来查找表格,但是像我在之前的评论中描述的那样直接搜索 gbox 内的表格似乎更好。 【参考方案2】:

我不知道 jqGrid 本身,但我很确定它会为样式元素添加自定义类,因此您很可能可以确定您感兴趣的类,然后使用 $('.classname')抓取所有元素。

【讨论】:

以上是关于发现实际页面内部是不是有 jqGrid 对象的主要内容,如果未能解决你的问题,请参考以下文章

jqGrid - 更改过滤器/搜索弹出表单 - 在页面上平展 - 不是对话框

在每次重新访问页面时触发搜索 jqgrid 过滤器

JQGrid重绘很慢

jqGrid自定的add按钮怎么实现页面跳转

添加将重定向到 JQGrid 中当前行的查看页面的按钮

jqGrid GridUnload / GridDestroy