前段时间有个需求中有点击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. NOIP2016滚粗计

    啦啦啦,第一次写游记~ Day0 早上浪浪浪,开了几盘CS 坐车到衢州,在车上开了几盘 艾萨克,然而好困啊…… 到衢二后围观XJ杭二合力A ztr,不是很懂为什么事情会变成这样 晚上开杀人游戏,wcz ...

  2. 面向对象Part4

    ---------------------------------------------------------------------------------------------------- ...

  3. Activity系列讲解---返回结果的处理

    设想一下:由当前Activity跳转到其它Activity,从其它Activity再返回到当前Activity时,如何获取其它Activity存放的数据?下面用一个例子讲解, 点击selsect按钮跳 ...

  4. XUT 1245

    这是一道2016湘潭邀请赛的题目,记得那个时候看到这个题目就想到了最短生成树,然后给别人做,WA了,最后发现是有向图,然后我自己去写了个搜索,结果是RE吧 今天刚刚好想到这个题目,然后再来做,发现这个 ...

  5. 在WPF中使用变通方法实现枚举类型的XAML绑定

    问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...

  6. MAC上向GitHub上上传自己的项目

    1首先需要在github上创建你自己的github账户 2新建仓库(注意选择initialize this repository with a README) 3生成ssh(公钥.pub&私钥 ...

  7. Sublime 3 如何设置xftp 排除文件夹“bower_components”,“node_modules”

    “bower_components”,“node_modules”这个文件夹,作为模块得引用文件,不需要下载本地进行编码,这里得文件非常多,若是不把这个两个文件夹排除掉掉话,通过xftp下载所有文件的 ...

  8. linux vim 插入行号

    1 在文本中插入行号 最近有朋友提到某编辑器有一个可以插入行号的插件,问Vim有没有办法可以在文章中插入行号.%$^&*#8~#$@#!--让我们看一下有多少种方式可以在vim中插入行号或数字 ...

  9. LeetCode 368

    题目描述: Given a set of distinct positive integers, find the largest subset such that every pair (Si, S ...

  10. Redsi和Memcached区别总结

    首先谈谈Redis和Memcached它们都是缓存在内存中的,唯一的区别就是Redis它本身会周期性的把 更新的一些数据写入到磁盘或者修改操作写入追加的记录文件中,并且在此基础上实现master-sl ...