JqGrid是一款用于展示数据的JavaScript插件,它非常方便、易用,可以将数据以表格方式展现给用户。但是每次呈现的数据并不总是完全符合用户需求的,有时数据需求不是很方便查看,需要进行一些转换和处理,比如,替换某一列的值。
实现思路在使用JqGrid展示完数据后,我们只需要获取到想要替换的那一列的数据即可。接下来,我们通过jQuery的each方法对每一行进行遍历,取出想要替换的值,然后通过String对象的replace方法进行替换,最后再将替换后的值赋值回去即可完成替换操作。
步骤第一步、准备环境
首先我们需要准备一些必要的资源文件,包括jQuery文件和JqGrid文件。以下是它们的CDN链接:
```html ```第二步、创建表格
在HTML页面上创建一个table,作为JqGrid的载体,并为其设定好id和class,后续操作中需要用到它们。
```html第三步、配置JqGrid参数
首先需要定义JqGrid的基本参数和数据格式。数据格式是用于描述从后台获取到的数据,然后进行字段解析。JqGrid会根据数据格式中的字段名自动创建表格列,并将数据填充到相应的单元格中。以下是一个数据格式的简单例子:
```javascript { \"page\": 1, \"records\": 10, \"rows\": [ { \"id\": 1, \"name\": \"张三\", \"gender\": \"男\", \"age\": 23, \"email\": \"zhangsan@qq.com\" }, { \"id\": 2, \"name\": \"李四\", \"gender\": \"女\", \"age\": 33, \"email\": \"lisi@qq.com\" } ], \"total\": 2 } ```这是一个JSON格式的数据,其中包括总页数(page)、总记录数(records)、每行的数据(rows)和总记录数的总页数(total)。
JqGrid参数的设置和数据格式是通过一个叫做options的变量来完成的。我们需要对options变量进行一系列的设定,包括定义表格列(colModel)、分页设置(pager)、表头设置、表格宽度设置等等。
```javascript var options = { // 定义表格列 colModel: [ { name: 'id', label: '序号', width: 30, sorttype: 'int', hidden: true }, { name: 'name', label: '姓名', width: 60 }, { name: 'gender', label: '性别', width: 40, align: 'center' }, { name: 'age', label: '年龄', width: 40, sorttype: 'int', align: 'right' }, { name: 'email', label: '邮箱', width: 120 } ], // 分页设置 pager: '#grid-pager', rowNum: 10, // 每页显示条数 rowList: [10, 20, 30], // 可选的每页显示条数 viewrecords: true, // 显示记录数 caption: '数据列表', // 表头 width: 700, // 表格宽度 height: 'auto', // 表格高度自适应 shrinkToFit: true, // 自动缩放表格宽度以适应容器 autoencode: true, // 默认对数据进行HTML编码,避免XSS攻击 jsonReader: { repeatitems: false, id: 'id' } }; ```第四步、将JqGrid绑定到table上
JqGrid的数据到底从哪里来呢?是从后台获取吗?不是,它是从前端的JavaScript数据中取得的。也就是说,前端必须先准备好数据,然后将这份数据传递给JqGrid组件,JqGrid才能渲染表格。这通过JqGrid的二次封装函数来实现bindGridData()。
```javascript // 将JSON数据绑定到JqGrid中 function bindGridData(data) { $('#grid').jqGrid('clearGridData'); $('#grid').jqGrid('setGridParam', { datatype: 'local', data: data, pager: '#grid-pager' }).trigger('reloadGrid'); } ```第五步、替换某一列的值
在实际开发中,我们经常需要对表格进行一些转换或格式化操作,JqGrid也提供了一个回调函数(cellattr)来方便我们完成这种需求。该函数会在创建单元格时进行调用,我们可以在其中进行一些替换、格式化等操作。
下面是如何将某一列的值进行替换的代码,其中我们通过行号r和列号c来找到需要替换的那个单元格:
```javascript var replaceStr = { '1': '正常', '2': '已删除', '3': '已禁用' }; // 需要替换的值,key为原值,value为替换后的值 $('#grid').jqGrid({ // 省略其它配置... // 自定义单元格样式 cellattr: function(rowId, cval, rawObject, cm, rdata) { var r = parseInt(rowId)-1, c = $.inArray(cm.name, cmNames); return 'style=\"color: ' + ( rdata.is_deleted==2 ? 'red' : 'black' ) + '\"'; } }); var cmNames = $('#grid').jqGrid('getGridParam', 'colNames'); // 获取表格列名 $('#grid').on('jqGridLoadComplete', function() { var ids = $('#grid').jqGrid('getDataIDs'); $.each(ids, function(i, id) { var rowData = $('#grid').jqGrid('getRowData', id); // 获取表格行数据 var replaceVal = replaceStr[rowData.status] || ''; $('#grid').jqGrid('setCell', id, 'status', replaceVal); // 替换单元格值 }); }); ``` 总结通过JqGrid,我们不仅可以展示数据,还可以对数据做出一些定制化的处理,以达到更好的用户体验。实现替换某一列的值,只是JqGrid的一个小小应用而已,还有很多其他的功能。如果你也对前端开发感兴趣,那么不妨尝试一下JqGrid!