【问题标题】:jqGrid auto filter highlighting search resultjqGrid自动过滤突出显示搜索结果
【发布时间】:2012-01-20 01:29:31
【问题描述】:

我需要帮助在匹配时突出显示 jqgrid 行的数据部分。

我的 jqGrid 标记:

<div title="Environment variables">
    <div class="jqUIDiv">
        <table id="tblEnvvars" width="100%"></table>
        <div id="EnvvarsGridpager"></div>
    </div>
</div>'

还有我的 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'});

例如:

如果行项目包含LD_LIBRARY_PATH 并且用户在搜索区域中输入LIB,则应突出显示LD_LIBRARY_PATH 中的LIB。

更新:2011 年 12 月 15 日

我找到this Highlight plugin 突出显示但需要帮助来应用它。

我用它来制作下面的截图

这是我使用的代码

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

function highlightIt()
{
$('#list1 > tbody > tr > td').highlight('HOST');
}

【问题讨论】:

  • 行的“突出显示”下的意思是什么?如果您选择网格的一行,则该行将通过向该行添加类“ui-state-highlight”来突出显示。这是你想要的多行网格吗?
  • @Oleg - 我想他想在搜索框中输入文本时突出显示行中数据的文本部分。
  • @Abhishek - 你看过filterToolbar 文档吗trirand.com/jqgridwiki/doku.php?id=wiki:toolbar_searching - 看起来beforeSearch 可能是一个很好的事件来挂钩你的高亮插件。
  • @Justin Ethier:是的,我想在一行中突出显示与搜索文本匹配的数据的文本部分

标签: jquery jqgrid


【解决方案1】:

从the answer 看the demo。如果您要使用 beforeSearch(请参阅 Justin Ethier 评论中的建议),您可以轻松修改演示以使用 filterToolbar。

更新:再次仔细阅读您的问题后,我喜欢您的想法,以突出搜索模式非常有趣。所以我创建了the demo,它演示了如何实现您的要求。我使用了选项

loadonce: true,
ignoreCase: true

对数据进行不区分大小写的本地过滤。如果您已使用本地数据类型(除'xml' 和'json' 之外的任何数据类型),则数据将已保存在本地,您无需添加额外的loadonce: true 选项。

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

现在关于实施。首先我使用你找到的Highlight plugin,但是我改变了行

spannode.className = 'highlight';

到

spannode.className = 'ui-state-highlight';

更兼容 jQuery UI CSS。

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

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

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);
                }
            }
        }
    }
}

【讨论】:

  • Oleg:我想在输入搜索字符串(实时)时连续突出显示数据的文本部分。例如:如果我将搜索字符串指定为LIB,它应该突出显示所有文本 LIB 在该列中,其中包含 LIB。另外作为示例,您可以尝试this page 来了解我的意思..(尽管此页面仅在单击后突出显示,但当用户在搜索字符串中输入键时,我需要)
  • 有什么想法吗?我试过beforeSearch,但我认为在我的情况下它应该是afterSearch,因为在输入时它应该突出显示数据网格中的文本部分,但是afterSearch在网格创建后立即触发,我无法理解.请在您的空闲时间提供帮助。谢谢
  • 1 个非常紧急的请求,我今天自己才知道这个问题,Check your example 当 jqgrid 中有很多行并且我将视图从 10 扩展到 50 并且尝试选择时第 10 行或第 11 行,它没有响应,在我的 jqgrid 中也是如此。您可以尝试单击名称为asd 和IIR Windows 的行吗?当我选择第 11 行时尝试在 IE8 中检查它选择第 10 行
  • @AbhishekSimon:原因对我来说似乎很简单:第 10 行和第 11 行“IIR Windows”和“asd”具有相同的 id=10。这是数据中的错误(AbhishekSimon11.xml)。您应该只使用 unique id。
  • 您可以通过将id: "cfgId" 添加为jsonReader 的附加属性来解决此问题。试试the demo。如果您要使用更新的 jqGrid,例如我在上一个演示中使用的 4.3.3,那么问题也不会存在。
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 2018-03-25
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多