Javascript 如何过滤jqGrid数据而不是网格本身

Javascript 如何过滤jqGrid数据而不是网格本身,javascript,jqgrid,free-jqgrid,Javascript,Jqgrid,Free Jqgrid,据我所知,它用于过滤和搜索数据。 我正在制作自己的过滤器,这些过滤器使用网格postData,其格式众所周知: { "groupOp": "AND", "groups" : [ { "groupOp": "OR", "rules": [ { "field": "name", "op": "eq", "data": "England" }, { "field": "id", "op"

据我所知,它用于过滤和搜索数据。 我正在制作自己的过滤器,这些过滤器使用网格
postData
,其格式众所周知:

{ "groupOp": "AND",
      "groups" : [
        { "groupOp": "OR",
            "rules": [
                { "field": "name", "op": "eq", "data": "England" },
                { "field": "id", "op": "le", "data": "5"}
             ]
        }
      ],
      "rules": [
        { "field": "name", "op": "eq", "data": "Romania" },
        { "field": "id", "op": "le", "data": "1"}
      ]
}
此数据在内部转换为
jlinq
query。 是否有任何公共函数可用于获取网格的当前查询? 我还发现有一种私有的可能性,可以像
sql
一样获取它

我想尽可能多地使用默认的
jqGrid
功能,但没有找到任何东西。如有任何提示,我们将不胜感激

更新2

下面是当前的实现。我需要采用它,所以有一些丑陋的部分,但你可以过滤价值观,以获得想法。首先,玩网格,因为代码很糟糕(这就是为什么我想更改它,真的:))

所以,主要思想是:

  • 我们将过滤器值修改为众所周知的
    规则

  • 我们遍历所有列,删除此列名的
    规则
    ,然后过滤数据。这里是我的问题部分:我需要过滤数据,而不是网格,只是一个数据来获得唯一的值。现在,我从
    postData
    生成一个正则表达式,并通过plain
    javascript
    生成网格数据子集。您可以在
    getDistinctColumnValues
    中看到这一点,我想使用一些网格过滤可能性使其工作方式与使用
    postData
    设置进行过滤/搜索时所有
    选项的工作方式相同


  • 此外,我还看到了一些内部函数,可以将过滤器作为
    sql
    -其中-这对于后端原型设计也很好。

    对不起,但我不确定您需要实现什么。您可以获取
    lastSelectedData
    参数,以根据当前过滤器获得过滤和排序数据的数组。完整数据可通过
    lastSelectedData
    参数获得。
    postData
    参数的
    filters
    属性获取当前筛选器

    您问“是否有任何公共函数可以获取网格的当前查询?”。您可以使用
    getGridParam
    方法获取当前查询。我猜,您希望访问接近jlinq的一些内部结构,但它实际上没有实际价值。您可以通过
    $.jgrid.from
    访问该类,但它并没有真正的帮助。实际操作只需在
    postData中设置新过滤器。过滤器
    参数,将
    search
    参数设置为
    true
    ,并调用
    触发器(“reloadGrid”)
    用新数据重新加载网格

    如果您需要自己过滤或排序某些数据,那么数组方法
    filter
    sort
    将更有效。如果以上信息不能帮助您解决问题,请在问题后附加附加更多信息,这些信息将在示例中更详细地描述问题,并向我发表小评论

    已更新:我仍然不能确定我是否完全理解您想要实现的功能。在我看来,如果您使用一些免费的jqGrid选项,那么您的JSFiddle演示的大部分功能都可以删除

    看,哪个用过

    colModel: [
        { name: 'name' },
        { name: 'surname' },
        { name: 'age' },
    ],
    cmTemplate: {
        width: 100,
        autoResizable: true,
        stype: 'select',
        searchoptions: {
            generateValue: true,
            noFilterText: "(All)"
        }
    },
    
    它在每列上设置一些默认属性。从4.14.0版开始,免费jqGrid支持
    generateValue:true
    属性的
    searchoptions
    ,用于具有
    stype:“选择”
    (请参阅)。在内部,它的工作方式类似于
    colModel
    的另一个选项:
    createColumnIndex:true
    ,它从所有具有
    createColumnIndex:true
    的列中的唯一值生成映射。可以使用
    getUniqueValueFromColumnIndex
    方法获取任何列的索引(如
    var indexName=$(“#列表”).jqGrid(“getUniqueValueFromColumnIndex”,“name”);
    )。如果使用
    stype:'select',搜索选项:{generateValue:true}
    ,则
    filterToolbar
    使用索引自动生成
    元素。jqGrid在内部使用
    oSv=$(“#列表”)[0](请参阅)。因此,使用该功能可以节省大量定制

    在使用
    createColumnIndex:true
    generateValue:true
    的情况下,唯一一件事是不要忘记的:在加载或重新加载数据后,将生成索引。因此,在填充数据之后,应该调用
    filterToolbar
    。如果使用
    loadonce:true
    选项从服务器加载数据,则应在
    loadCompleted
    回调中调用
    filterToolbar
    better(如演示中所示)。如果直接加载本地数据,则不需要。填充数据后,只需调用
    filterToolbar

    另一种选择是使用
    而不是
    。它允许使用过滤器工具栏中的
    ,但具有选择或选择功能2。请参阅,我使用的
    createColumnIndex:true,searchoptions:{sopt:[“cn”、“eq”、“bw”、“ew”、“bn”、“nc”、“en”],clearSearch:true,generateDatalist:true}
    。数据列表在不同的web浏览器中以稍有不同的方式实现,它们有一些缺点,但它是本机的实现特性,因此工作速度非常快。例如,可以在网格中使用1000个唯一值和10000行(我严格建议在这种情况下使用本地数据分页,并使用页面大小10-25)。包含1000个元素的数据列表仍然具有良好的性能,例如select2

    最后一句话。我看到您构建了
    colModelIndexesByNames
    来按名称查找列。内置参数
    iColByName
    已经存在于免费jqGrid中,并且可以在内部使用。如果
    p
    是对jqGrid(
    var p=$(“#list”).jqGrid(“getGridPara”)参数的引用