如何在免费的 jqGrid 中的 onCellSelect 中获取选定的搜索过滤器?

How can I get the selected search filter in onCellSelect in free jqGrid?

我有一个网格,当用户突出显示他们想要过滤的文本时,我会在其中提供搜索。

onCellSelect 看起来像这样:

onCellSelect: function(row, col, content, event) {
    var cm = grid.jqGrid("getGridParam", "colModel");
    if (window.getSelection) {
        selection = window.getSelection();
    } else if (document.selection) {
        selection = document.selection.createRange();
    }
    selectionColumn = cm[col].name;
    selection.toString() !== '' && $("#gs_"+selectionColumn).val(selection.toString());
    console.log($("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper'));
    if(selection.toString() != '')
    {
        grid[0].triggerToolbar();
    }

}

现在我有一些自定义的搜索运算符并在网格中使用它们:

searchoptions:{sopt:["cn",'mc','mn',"eq","ne","lt","le","gt","ge","bw","ew","nc"]}

mcmncustomSortOperations 的一部分。

现在我想要的是当用户在网格内的特定单元格内选择一些文本时,我想检测使用了哪个搜索过滤器。例如,默认情况下搜索过滤器是 cn.

我试过这个:

$("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper')

但它每次都给我默认值 cn

我可以得到 link 中的文本,这将给我一个符号名称,例如 ~ 代表 cn== 代表 eq

$("a.soptclass[data-colname='"+selectionColumn+"']").text()

然而,有没有一种 jqgrid 方法可以选择准确的搜索运算符?即 cneqnele

如果需要工作演示,请告诉我,我会更新问题。

更新: DEMO.

在 659 和 660 行我正在使用这个回调 $("a.soptclass[data-colname='"+selectionColumn+"']").text()

换句话说,我希望在 onCellSelect

中选择搜索运算符

我仍然不完全理解您想要实现的确切行为,但您似乎可以使用以下代码启动 onCellSelect 代码:

onCellSelect: function(row, col, content, event) {
    var p = $(this).jqGrid("getGridParam");
    var hDiv = p.frozenColumns === true && p.colModel[col].frozen === true ?
                this.grid.fhDiv : this.grid.hDiv;
    var $elem = $(hDiv).find("#gs_" + $.jgrid.jqID(p.id + "_" + p.colModel[col].name));
    var oper = $elem.parent().prev().children("a").data("soper");
    ...
}

$elem 使用当前免费 jqGrid 实现的标准 id 行为(未指定 filterToolbaridMode 选项)。元素 $elem 是过滤器工具栏中的 <input><select> 元素。您可以使用 $elem(selection) 更改值。 oper 变量包含当前选择的搜索操作。应该使用 .data("soper") 而不是 .attr("data-soper") 来访问数据。

我希望这是你目前所缺少的。