【问题标题】:jqGrid sort columns ignoring html markupjqGrid排序列忽略html标记
【发布时间】:2012-11-21 21:35:35
【问题描述】:

我需要在 jqGrid 中实现自定义排序,在列中我们有 html 标记,这会阻止正确排序,例如:

<a href="/Templates/Article.aspx?id=12884945915" class="link" title="Article  123">Article </a>

现在有一种方法可以设置 jqGrid 以忽略 html 标记对该列进行排序。

更新 这是本专栏的colmodel

{"sortable":true,"name":"Title","index":"Title","hidden":false,"sorttype":null,"formatter":null,"formatoptions":null,"datefmt":null,"typeName":null},

这是列的一个示例:

"Title":"<a href='/Templates/Article.aspx?id=4294967489' class='link' title='Sensor'>Sensor</a>"

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    如果您根据预定义的formatter: "showlink" 或您的自定义格式化程序构建列的包含,我想您不会遇到所描述的问题。在使用custom formatter 的情况下,您应该不要忘记定义unformat 函数,该函数从列的单元格中获取文本。

    我想如果你只为列定义unformat属性,你的问题就会得到解决。

    另一种选择是使用自定义排序。只是将sorttype 指定为functionThe answerthis one 提供了这种实现的示例。重要的是要了解sorttype 将仅用于本地 排序的情况。如果您使用服务器端排序,那么您应该在服务器端代码中搜索所描述问题的根源。

    已更新:不建议在数据中使用 HTML 片段。在将数据与标记混合的方式中,这使得排序更加困难。取而代之的是,您可以替换输入数据

    "Title":"<a href='/Templates/Article.aspx?id=4294967489' class='link' title='Sensor'>Sensor</a>"
    

    "ArticleId":4294967489, "Title":"Sensor"
    

    单元格内的&lt;a&gt; 元素可以根据自定义格式化程序构建。在这种情况下,您可以使用列定义,例如

    {name: "Title", width: 100,
        formatter: function (cellvalue, options, rowObject) {
            return "<a href='/Templates/Article.aspx?id=" + rowObject.refid +
                "' class='link' title='" + $.jgrid.stripHtml(cellvalue) + "'>" +
                $.jgrid.htmlEncode(cellvalue) + "</a>";
        }}
    

    如果您在网格中使用的 rowid(名称为 id 的列或具有属性 key: true 且值是唯一的列)与 ArticleId 相同,那么您可以使用 options.rowId而不是rowObject.refid

    您可以阅读更多关于自定义格式化程序的信息,例如 the answer

    【讨论】:

    • 我没有使用自定义格式化程序,也不知道如何实现自定义排序类型,它只按链接名称排序。
    • @jasin_89:您应该包含您使用的 JavaScript 代码。完全不清楚如何填充网格。单元格如何获得值&lt;a href="/Templates/Article.aspx?id=12884945915" class="link" title="Article 123"&gt;Article &lt;/a&gt;colModel中单元格所在的列是如何定义的?
    • @jasin_89:formatter 的值,您发布为 string 而不是函数!!!带函数的对象不能序列化为 JSON。我不明白你为什么要为每个 Ajax 构建 colModel所有 数据。
    • @jasin_89:解决问题的方法有很多。到目前为止,我们花了很多时间来回写作。我仍然不知道您在做什么,jqGrid 定义(JavaScript 代码)如何,后端程序(Web 应用程序)如何,您使用哪种格式作为 jqGrid 的输入等等。您应该更详细地描述您的问题和您的程序以节省我们的时间。要解决格式化程序的问题,您可以例如将自己的格式化程序定义为格式化程序插件,并使用格式化程序在名称下,如formatter: "myCustomFormatter"
    • @jasin_89:查看the answerthe code 中的示例如何将自己的格式化程序注册为插件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2012-03-13
    • 2021-05-26
    • 2023-04-08
    • 2021-12-25
    相关资源
    最近更新 更多