我需要在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>"
答案 0 :(得分:3)
如果您构建包含预定义formatter: "showlink"
列或关于自定义格式化程序的列,我认为您将不会遇到所描述的问题。如果使用custom formatter,您应该忘记定义unformat函数,该函数从列的单元格中获取文本。
如果您只为列定义unformat属性,我认为您的问题将会得到解决。
另一个选择是使用自定义排序。它只不过是将sorttype
指定为功能。 The answer和this one提供了此类实施的示例。了解sorttype
仅在本地排序时才会使用,这一点非常重要。如果使用服务器端排序,则应在服务器端代码中搜索所述问题的来源。
更新:不建议在数据中使用HTML片段。在您将数据与标记混合的方式中,这使得排序更加困难。而不是你可以替代输入数据
"Title":"<a href='/Templates/Article.aspx?id=4294967489' class='link' title='Sensor'>Sensor</a>"
到
"ArticleId":4294967489, "Title":"Sensor"
您可以根据自定义格式化程序构建单元格内的<a>
元素。在这种情况下,您可以使用列定义,如
{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中了解有关自定义格式化程序的详情。