Easyui之datagrid实现点击单元格修改单元格背景颜色
前段时间有个需求中有点击datagrid的单元格实现某种事件,调用datagrid的onclickCell这个方法很容易实现,但是体验不好啊,完全不知道自己刚才点击的是哪个单元格,然后就尝试单击单元格的时候给改变单元格的颜色,经过一番折腾,最终实现该功能,然后写下来记录一下实现过程。
关于Easyui这里就不再多说,其是一组基于JQuery的UI插件的集合。其中datagrid估计是Easyui中最常用的一个插件了。
再介绍实现点击单元格修改单元格背景颜色之前,先来简单的介绍下datagrid的用法
datagrid的创建
有三种创建方法
第一种:从现在的表格元素创建Datagrid,在HTML中定义列、行和数据
<table class="easyui-datagrid">
<thead>
<tr>
<th data-options="field:'code'">编码</th>
<th data-options="field:'name'">名称</th>
<th data-options="field:'price'">价格</th>
</tr>
</thead>
<tbody>
<tr>
<td>001</td><td>name1</td><td>2323</td>
</tr>
<tr>
<td>002</td><td>name2</td><td>4612</td>
</tr>
</tbody>
</table>
第二种:通过table标签创建DataGrid控件.在表格内使用th标签定义列
<table class="easyui-datagrid" style="width:400px;height:250px"
data-options="url:'datagrid_data.json',fitColumns:true,singleSelect:true">
<thead>
<tr>
<th data-options="field:'code',width:100">编码</th>
<th data-options="field:'name',width:100">名称</th>
<th data-options="field:'price',width:100,align:'right'">价格</th>
</tr>
</thead>
</table>
第三种:使用Javascript去创建Datagrid控件
<table id="dg"></table>
<script type="javascript/text">
$('#dg').datagrid({
url:'datagrid_data.json',
columns:[[
{field:'code',title:'Code',width:100},
{field:'name',title:'Name',width:100},
{field:'price',title:'Price',width:100,align:'right'}
]]
});
<script>
很明显考虑通用性,我们选择第三种的创建方式
最终效果图如下:

要想实现这样的效果,我们需要做好准备工作
让我们将步骤一步一步分解。
下图的datagrid 的id为 header
通过google浏览器进行调试
在watch栏添加观察的元素

然后点击右侧的元素,得到下图结果

是不是发现了什么,原有的table经过渲染,产生了一些的其他的元素,
如果你接着讲鼠标移至到相应元素上,你会发现,当移动到"class = 'datagrid-view2'"元素

datagrid的数据被着色了,说明数据存放在这个元素中
然后我们接着将存放数据的元素展开,得到如下图

我们发现该元素有三个节点:很容易发现"class='datagrid-header'"的节点对应着datagrid的列头,
”class='datagrid-footer'“的节点对应着datagrid的尾部,我们的数据则保存在"class='datagrid-body'"的节点里
,最重要的一步,展开datagrid-body的节点。

发现有好多td标签,td标签代表着什么?将鼠标移动到上面,发现每个td标签,代表着一个单元格。
如果我们可以成功获取到每个单元格元素,那么修改单元格的颜色就显得一碟了。
那么如果通过代码获取到这些元素呢?
注意:原来的table节点跟这些div节点是同一个节点的子节点
so,
第一步.获取table的父节点
a = document.getElementById("header")
parent = = a.parentNode
在watch添加上述代码,然后展开,再展开childNodes

获取"class='datagrid-view2'"节点元素
view2 = parent.childNodes[1]
然后再次展开

获取”class='datagrid-body'“节点元素
datagridbody = view2.childNodes[1]
again展开

获取table节点
tablenode = datagridbody.childNodes[0]

重复上述过程展开过程,获取tbody
tbodynode = tablenode.childeNodes[0]
接下来如果想获取第i行第j列的td元素
使用如下代码
tdnode = tbodynode.childNodes[i-1].childNodes[j-1] //下标从0开始的
修改颜色就不用我多说了吧
tdnode.style.backgroundColor = "颜色"
大功告成,通过上述方法可以实现自定义点击单元格的背景颜色了。
Easyui之datagrid实现点击单元格修改单元格背景颜色的更多相关文章
- 解决点击cell时,UILabel的背景颜色消失的问题
-(void)setSelected:(BOOL)selected animated:(BOOL)animated{ [super setSelected:selected animated:anim ...
- wpf 获取DataGrid某一个单元格,设置此单元格ToolTip内容和背景颜色
public void GetCell() { for (int i = 0; i < this.datagrid1.Items.Count; i++) ...
- vue中遇到的一个点击展开或收起并且改变背景颜色的问题。
<template> <div class="expense-center"> <div class="fl expense-left&qu ...
- [ASP.NET] [JS] GridView点击高亮当前选择行,并在点击另一行时恢复上一选择行背景颜色
在ASP.NET中的gridview控件里面可以通过设定其OnRowDataBound事件来进行实现高亮当前行的操作 前端控件的设置: 只要设置好OnRowDataBound属性即可,会自动在.cs文 ...
- easyui的datagrid改变单元格颜色
另一种方法:https://www.cnblogs.com/raitorei/p/10395233.html easyui的datagrid改变整行颜色:https://www.cnblogs.com ...
- easyui datagrid动态设置行、列、单元格不允许编辑
Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...
- Datagrid扩展方法onClickCell{easyui-datagrid-扩充-支持单元格编辑}
//-----------------------------------------------------------------/******************************** ...
- easyui的datagrid组件,如何设置点击某行不会高亮该行的方式
easyui的datagrid组件,有些时候我们点击某行不想高亮显示,如何设置点击某行不会高亮该行的方式,有好几种方法可以实现,我举几个,可以根据你具体需求灵活应用: 1.修改easyui的css将高 ...
- easyui 改变单元格背景颜色
另外一种方法:https://www.cnblogs.com/raitorei/p/9989649.html easyui的datagrid改变整行颜色:https://www.cnblogs.com ...
随机推荐
- Sicily 1051: 魔板(BFS+排重)
相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...
- kernel 4.4.12 EETI eGTouch 电容屏驱动移植
kernel 4.4.12 EETI eGTouch 电容屏驱动移植: 在make menuconfig 里面添加如下选项: 添加通过事件上报接口节点: Device Drivers ---> ...
- Linux安装mariadb二进制版本
上一篇说了mariadb编译安装过程,但在生产环境中一般使用发布好的二进制版本,由于安装过程和之前一样,不再详细叙述,只是简单概括一下安装过程: 1. 下载 地址为:https://downloads ...
- Python: open和codecs.open
python的编解码: input文件(gbk, utf-8...) ----decode-----> unicode -------encode------> output文件 ...
- Ubuntu16.04 VTK7.1.0+QT4.8.6+QtCreator开发环境配置
VTK需要OpenGL3.0或更高版本的驱动,但虚拟机下的Ubuntu不支持OpenGL3.0,或者自己按网上教程配置之后也能支持,但过程相当繁琐,本人试验失败. 最终决心采用双系统,装好之后,执行g ...
- 显示或隐藏div
代码来源于博客,如有侵权,请联系我! ASP.NET中TextBox控件设置ReadOnly="true"H或Enabled=false后台取不到值 当TextBox设置了Read ...
- SQL语法和运算符(一)
一个数据库通常包含一个或多个表.每个表由一个名字标识,表包含带有数据的记录(行). 一些最重要的SQL命令(SQL对大小写不敏感): 一.SQL语法 select:从数据库中提取数据 update:更 ...
- kettle系列-4.kettle定制化开发工具类
要说的话这个工具类还是比较简单的,每个方法体都比较小,但用起来还是可以的,把开发中一些常用的步骤封装了下,不用去kettle源码中找相关操作的具体实现了. 算了废话不多了,直接上重点,代码如下: im ...
- 手把手教你玩转nginx负载均衡(五)----配置后端服务器组
引言 在前面几篇中,我们成功的搭建起了一台nginx服务器,所以我们要重复前面的步骤,把服务器的数量增加到3台以上,我这里已经建好了另外两台,分别是centos7-22,centos7-23,对应的i ...
- 爬虫requests模块 1
让我们从一些简单的示例开始吧. 发送请求¶ 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试 ...