jqGrid自动过滤器突出显示搜索结果

abi*_*964 5 jquery jqgrid

我想要帮助突出显示jqgrid行的数据部分以及它们何时匹配.

我的jqGrid标记:

<div title="Environment variables">
    <div class="jqUIDiv">
        <table id="tblEnvvars" width="100%"></table>
        <div id="EnvvarsGridpager"></div>
    </div>
</div>'
Run Code Online (Sandbox Code Playgroud)

和我的jqGrid代码:

var envVars=[]; //xml is a xml response sent from server
$(xml).children('product').each(function(){ 
    $(this).children('envvars').each(function(){ 
        $(this).children('variable').each(function(){ 
            var row={};
            isPresent=true;
            row.name=$(this).attr('name');
            row.value=$(this).attr('value');
            envVars.push(row);
        });
    });
});

jQuery("#tblEnvvars").jqGrid({
        datatype: "local",    
        data: envVars,
        colNames:['Name','Value'],
        colModel:[
            {name:'name',index:'name', align:"left"},   
            {name:'value',index:'value', align:"left"}

        ],
        pager : '#EnvvarsGridpager',
        rowNum:10,
        rowList:[10,50,100],
        scrollOffset:0,
        height: 'auto',
        autowidth:true,
        viewrecords: true,
        gridview: true

    });

    jQuery("#tblEnvvars").setGridParam({rowNum:10}).trigger("reloadGrid");
    jQuery("#tblEnvvars").jqGrid('filterToolbar',{stringResult: true, searchOnEnter: false, defaultSearch: 'cn'});
Run Code Online (Sandbox Code Playgroud)

例如:

如果行项目包含搜索区域中的LD_LIBRARY_PATH用户类型LIB,则LIBLD_LIBRARY_PATH应突出显示.

更新:15/12/2011

我发现这个Highlight插件要突出显示,但在应用它时需要帮助.

我用它来创建下面的截图

在此输入图像描述

这是我使用的代码

jQuery("#list1").jqGrid('filterToolbar',{stringResult: true, searchOnEnter: false, defaultSearch: 'cn', afterSearch:highlightIt()});

function highlightIt()
{
$('#list1 > tbody > tr > td').highlight('HOST');
}
Run Code Online (Sandbox Code Playgroud)

Ole*_*leg 8

答案看看演示.如果您愿意(请参阅Justin Ethier评论中的建议),您可以轻松修改要使用的演示.beforeSearchfilterToolbar

更新:再次仔细阅读您的问题后,我再次强调您的想法,以突出搜索模式非常有趣.所以我创建了演示,演示了如何实现您的需求.我用过这些选项

loadonce: true,
ignoreCase: true
Run Code Online (Sandbox Code Playgroud)

对数据进行不区分大小写的本地过滤.如果您已经使用本地数据类型(数据类型的任何excepring 'xml''json')的数据将已经在本地举行,你不需要添加额外的loadonce: true选项.

键入网格搜索模式上方的搜索过滤器,数据不仅会被模式过滤,而且列中非常单元格的模式部分将被突出显示,从而提高可见性.所以你可以看到如下图所示的结果:

在此输入图像描述

现在关于实施.首先,我使用你找到的Highlight插件,但我更改了这一行

spannode.className = 'highlight';
Run Code Online (Sandbox Code Playgroud)

spannode.className = 'ui-state-highlight';
Run Code Online (Sandbox Code Playgroud)

与jQuery UI CSS更兼容.

我没有使用filterToolbar的任何回调函数,因为在填充新的网格体之前将调用所有回调函数.该filterToolbar填写filters的部分postData,在设定search的jqGrid的参数true和触发reloadGrid.因此,应该突出显示loadComplete(或gridComplete)回调内部的数据,因为此时应该突出显示的所有数据都在网格中.所以我以简单的形式使用了filterToolbar

$("#list1").jqGrid('filterToolbar',
    {stringResult: true, searchOnEnter: false, defaultSearch: 'cn'});
Run Code Online (Sandbox Code Playgroud)

loadComplete您的实施如下:

loadComplete: function () {
    var filters, i, l, rules, rule, iCol, $this = $(this);
    if (this.p.search === true) {
        filters = $.parseJSON(this.p.postData.filters);
        if (filters !== null && typeof filters.rules !== 'undefined' &&
                filters.rules.length > 0) {
            rules = filters.rules;
            l = rules.length;
            for (i = 0; i < l; i++) {
                rule = rules[i];
                iCol = getColumnIndexByName($this, rule.field);
                if (iCol >=0) {
                    $('>tbody>tr.jqgrow>td:nth-child(' + (iCol + 1) +
                        ')', this).highlight(rule.data);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)