前段时间有个需求中有点击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实现点击单元格修改单元格背景颜色的更多相关文章

  1. 解决点击cell时,UILabel的背景颜色消失的问题

    -(void)setSelected:(BOOL)selected animated:(BOOL)animated{ [super setSelected:selected animated:anim ...

  2. wpf 获取DataGrid某一个单元格,设置此单元格ToolTip内容和背景颜色

    public void GetCell()        {            for (int i = 0; i < this.datagrid1.Items.Count; i++)    ...

  3. vue中遇到的一个点击展开或收起并且改变背景颜色的问题。

    <template> <div class="expense-center"> <div class="fl expense-left&qu ...

  4. [ASP.NET] [JS] GridView点击高亮当前选择行,并在点击另一行时恢复上一选择行背景颜色

    在ASP.NET中的gridview控件里面可以通过设定其OnRowDataBound事件来进行实现高亮当前行的操作 前端控件的设置: 只要设置好OnRowDataBound属性即可,会自动在.cs文 ...

  5. easyui的datagrid改变单元格颜色

    另一种方法:https://www.cnblogs.com/raitorei/p/10395233.html easyui的datagrid改变整行颜色:https://www.cnblogs.com ...

  6. easyui datagrid动态设置行、列、单元格不允许编辑

    Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...

  7. Datagrid扩展方法onClickCell{easyui-datagrid-扩充-支持单元格编辑}

    //-----------------------------------------------------------------/******************************** ...

  8. easyui的datagrid组件,如何设置点击某行不会高亮该行的方式

    easyui的datagrid组件,有些时候我们点击某行不想高亮显示,如何设置点击某行不会高亮该行的方式,有好几种方法可以实现,我举几个,可以根据你具体需求灵活应用: 1.修改easyui的css将高 ...

  9. easyui 改变单元格背景颜色

    另外一种方法:https://www.cnblogs.com/raitorei/p/9989649.html easyui的datagrid改变整行颜色:https://www.cnblogs.com ...

随机推荐

  1. awk命令详解

    搜索 纠正错误  添加实例 awk 文本和数据进行处理的编程语言 补充说明 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件 ...

  2. Selenium Xpath Tutorials - Identifying xpath for element with examples to use in selenium

    Xpath in selenium is close to must required. XPath is element locator and you need to provide xpath ...

  3. nginx配置返回文本或json

    有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并且响 ...

  4. MySql的一些用法

    1.怎样找到MySql数据的存储目录? 答:从服务中查看正在运行的MySql,查看它的启动参数,可能是这个样子: "D:\Program Files\MySQL\MySQL Server 5 ...

  5. Python 30分钟入门——数据类型 and 控制结构

    Python是一门脚本语言,我也久闻大名,但正真系统的接触学习是在去年(2013)年底到今年(2014)年初的时候.不得不说的是Python的官方文档相当齐全,如果你是在Windows上学习Pytho ...

  6. Linux学习记录

    ---恢复内容开始--- linux与unix的关系 linux是借鉴了unix设计思想,也称linux位类unix系统. Linux常用命令 1.命令基本格式 命令[选项][参数] 注意:个别命令不 ...

  7. java servlet

    回顾 1三要素是什么? 入口(login.html)     处理(LoginServlet.java)  出口 (success.jsp) 2如何访问servlet http://IP:port/p ...

  8. 第6章 Spring的事物处理

    一.简述事物处理 1.事物处理的基本概念 1)提交:所有操作步骤都被完整执行后,称该事物被提交 2)回滚:某步操作执行失败,所有操作都没被提交,则事物必须被回滚 2.事物处理的特性(ACID) 1)原 ...

  9. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  10. MS Sql Server

    # 安装SQL2000时总是提示:以前的某个程序安装已经在安装计算机上创建挂起的文件操作 原文:https://zhidao.baidu.com/question/424367402.html # S ...