easyUI tree 自定义图标
文章转载自: https://blog.csdn.net/zhlantian/article/details/52913115
近期由于项目中需要使用easyui tree树形列表,并在系统中动态配置节点的图标,根据官方demo,配置图标只能使用iconCls树形来对每个节点进行图标的设置,这使得在数据库存储中需要存储icon.css中的类名(类似icon-save)或者自定义的类名,同时,这需要提前在系统中对不同的图标url设置好不同的类名,如果图片不在系统中已知,则无法改变图标。同时,由于本系统中需求比较特殊:各个功能在系统中进行配置,每一个功能是一个节点,每个节点需要可配置图标,而且要求数据库中存储的是图标的文件路径,数据库中结构如下:

图标路径存储在WebPath字段中,要求根据其路径生成图标。对此,初步想法是测试
1、直接将该url赋值给iconCls字段,因为查阅资料可以发现extjs等部分控件可以将url直接赋值给iconCls字段,对此进行测试:
在Dreamweaver 中添加如下代码,直接初始化一个tree,并添加一个img确保图标路径正确
<h2>Editable Tree</h2>
<p>Click the node to begin edit, press enter key to stop edit or esc key to cancel edit.</p>
<div style="margin:20px 0;"></div>
<div class="easyui-panel" style="padding:5px">
<ul id="tt" class="easyui-tree" data-options="
url: 'tree_data1.json',
method: 'get',
animate: true,
onClick: function(node){
$(this).tree('beginEdit',node.target);
}
"></ul>
</div>
<img src="01.png"/>
tree_data1.json中数据如下:
[{
"id":1,
"text":"Folder1",
**"iconCls":"01.png",**
"children":[{
"text":"File1",
"checked":true
},{
"text":"Books",
"state":"open",
"attributes":{
"url":"/demo/book/abc",
"price":100
},
"children":[{
"text":"PhotoShop",
"checked":true
},{
"id": 8,
"text":"Sub Bookds",
"state":"closed"
}]
}]
},{
"text":"Languages",
"state":"closed",
"children":[{
"text":"Java"
},{
"text":"C#"
}]
}]
设置一个节点的iconCls,如上代码中加粗部分,查看显示效果,结果如下图:

发现修改的第一个节点Folder1图标还是默认的,说明并没有效果,F12查看此时的DOM节点,如下图:

发现类名为tree-icon的span节点上只是多了一个 01.png的类名,说明iconCls的配置只是将配置的字符以类名直接添加到span上,显然不会有任何效果。
2、经过上面的测试,发现url直接赋值的形式无法解决,但是根据上面的DOM结构可以看出,设置的图标就是将类名为tree-icon的span元素的background属性设置为指定的图片,而且默认的样式都是采用外部连接方式进行设置的。这样,根据CSS的优先级,只需要通过内联方式设置background样式将background属性覆盖即可。结合API和对各个事件、方法的测试,选定formatter属性对数据进行一定的处理,在调试过程中发现formatter属性对应的方法传递node参数,而且node中有一个属性“domId”即为最终DOM加载完成后树节点的Id,则可以通过该id找到子节点中类名为tree-icon的span元素,对它的background进行设置,代码如下
$.ajax({
type: "POST",
url: "/Service/LSPRTAPI.asmx/GetMenuData",
contentType: "application/json; charset=utf-8",
data:'{"parentNo":"'+parentNo+'"}',
dataType: 'json',
success: function (data) {
var icon = [];
var paradata = eval('(' + data.d + ')');
$('#tree' + parentNo).tree({
data: paradata,
onSelect: function (node) {
if (node==null || node.Url == null || node.Url.length<=0) {
return;
}
LoadUrl(node.Url, node.text);
},
formatter: function (node) {
icon.push({ "domId": node.domId, "webPath": node.Webpath });
return node.text;
}
});
//根据url修改图标,使用内联样式覆盖外部链接
$.each(icon, function (index, val) {
$('#' + val.domId + ' .tree-icon').css("background", "url(" + val.webPath + ") no-repeat center center");
});
}
根据调试得到返回的JSON数据如下:
[
{
Parentno: "122",
id: "123",
text: "出让方模块",
Fk_App: "LSPRT",
Url: "",
Webpath: "",
children: [
{
Parentno: "123",
id: "130",
text: "出让用户管理",
Fk_App: "LSPRT",
Url: "admin\/BidTransferUser.aspx?ustate=0",
Webpath: "img\/no.png"
},
{
Parentno: "123",
id: "131",
text: "出让信息审核",
Fk_App: "LSPRT",
Url: "admin\/BidTransferAudit.aspx?ustate=0",
Webpath: "img\/no.png"
},
{
Parentno: "123",
id: "132",
text: "出让挂牌设置",
Fk_App: "LSPRT",
Url: "admin\/BidTransferBoard.aspx?ustate=1",
Webpath: "img\/01.png"
}
]
},
{
Parentno: "122",
id: "134",
text: "受让方模块",
Fk_App: "LSPRT",
Url: "",
Webpath: "",
children: [
{
Parentno: "134",
id: "2116",
text: "受让用户管理",
Fk_App: "LSPRT",
Url: "admin\/BidAssigneeUser.aspx?ustate=0",
Webpath: "img\/01.png"
},
{
Parentno: "134",
id: "2117",
text: "受让信息审核",
Fk_App: "LSPRT",
Url: "admin\/BidAssigneeAudit.aspx?ustate=0",
Webpath: "img\/01.png"
},
{
Parentno: "134",
id: "2118",
text: "取消受让审核",
Fk_App: "LSPRT",
Url: "admin\/BidAssigneeCancel.aspx?ustate=1",
Webpath: "img\/01.png"
}
]
},
{
Parentno: "122",
id: "2119",
text: "组织交易",
Fk_App: "LSPRT",
Url: "admin\/BiddingList01.aspx",
Webpath: "img\/01.png"
},
{
Parentno: "122",
id: "2120",
text: "鉴证书模块",
Fk_App: "LSPRT",
Url: "",
Webpath: "",
children: [
{
Parentno: "2120",
id: "2121",
text: "鉴证书管理",
Fk_App: "LSPRT",
Url: "ab\/abList01.aspx",
Webpath: "img\/01.png"
},
{
Parentno: "2120",
id: "2122",
text: "鉴证书变更管理",
Fk_App: "LSPRT",
Url: "ab\/abReplaceList01.aspx",
Webpath: "img\/01.png"
}
]
}
]
最后效果如图:

这里有几点需要注意:
1、在使用formatter属性时,tree是还没有生成DOM节点,所以这里只是将domId和Webpath进行存储,等树加载完成后,再获取DOM节点进行CSS属性设置
2、tree的onSuccessLoad事件触发时,是数据加载完成,并不是tree的DOM节点已经生成
3、测试时发现,图标最好是16*16大小,太大可能会显示不正常
easyUI tree 自定义图标的更多相关文章
- easyui tree 更改图标
easyui tree 更改图标 ,onLoadSuccess: function (node, data) { $('#tt .tree-icon').css("background&qu ...
- easyui之自定义字体图标(鼠标覆盖时切换颜色)
项目要求是自定义字体图标,使用easyui框架结构,众所周知easyui强功能弱样式,字体图标其实就是一张图片.要达到切换图标颜色的效果,要么就是有两套图,使用js控制.但是我这个人比较懒,不喜欢做复 ...
- 【EasyUI学习-2】Easyui Tree的异步加载
作者:ssslinppp 1. 摘要 2. tree的相关介绍 3. 异步加载tree数据,并实现tree的折叠展开 3.1 功能说明: 3.2 前台代码 3.3 后台代码 4. 其他 1 ...
- [转]easyui tree 模仿ztree 使用扁平化加载json
原文地址:http://my.oschina.net/acitiviti/blog/349377 参考文章:http://www.jeasyuicn.com/demo/treeloadfilter.h ...
- Jquery easyui tree的使用
这个ui用的一切都是json数据.树也是如此! 后台需要返回与格式匹配的json数据才能正确加载树. 页面定义一个ui: <ul id="messageInfoAddTree" ...
- EasyUI –tree、combotree学习总结
EasyUI –tree.combotree学习总结 一. tree总结 (一).tree基本使用 tree控件是web页面中将数据分层一树形结构显示的. 使用$.fn.tree.defaults ...
- 【原】无脑操作:EasyUI Tree实现左键只选择叶子节点、右键浮动菜单实现增删改
Easyui中的Tree组件使用频率颇高,经常遇到的需求如下: 1.在树形结构上,只有叶子节点才能被选中,其他节点不能被选中: 2.在叶子节点上右键出现浮动菜单实现新增.删除.修改操作: 3.在非叶子 ...
- 重写TreeView,自定义图标,生成通行的下划线,取消默认获得焦点失去焦点的效果,并支持拖拽节点到外界
1.运行效果: 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.VideoTreeControl" xmlns="ht ...
- 数据网格和树-EasyUI Datagrid 数据网格、EasyUI Propertygrid 属性网格、EasyUI Tree 树、EasyUI Treegrid 树形网格
EasyUI Datagrid 数据网格 扩展自 $.fn.panel.defaults.通过 $.fn.datagrid.defaults 重写默认的 defaults. 数据网格(datagrid ...
随机推荐
- django图书管理系统实例
首页,其他页面全部继承首页的上半部分 点击发布图书页面 首页点击书名,跳转到图书信息界面,该界面可删除图书 项目结构 #views.py from django.shortcuts import re ...
- JVM垃圾回收算法及分代垃圾收集器
一.垃圾收集器的分类 1.次收集器 Scavenge GC,指发生在新生代的GC,因为新生代的Java对象大多都是朝生夕死,所以Scavenge GC非常频繁,一般回收速度也比较快.当Eden空间不足 ...
- 【题解】 Luogu P4145 上帝造题的七分钟2 / 花神游历各国
原题传送门 这道题实际和GSS4是一样的,只是输入方式有点区别 GSS4传送门 这道题暴力就能过qaq(这里暴力指线段树) 数据比较水 开方修改在线段树中枚举叶节点sqrt 查询区间和线段树基本操作 ...
- linux homebrew skill 技巧
$ cat /usr/bin/gitdiffH0#!/bin/bashgit diff HEAD $(git ls-files| grep '\.py$\|\.py\.in$') | osflake8 ...
- bzoj 3262 陌上花开 - CDQ分治 - 树状数组
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- topcoder srm 715 div1 -23
1.一个计算器,它执行的是一个只包含‘+’,‘-’的字符串$s$.初始化值为0,每遇到一个‘+’增加1,否则减少1.并保存运算过程的最大最小值$Max,Min$,最后的答案是$Max-Min$.比如$ ...
- Sorting arrays in NumPy by column
https://stackoverflow.com/questions/2828059/sorting-arrays-in-numpy-by-column I suppose this works: ...
- P2057 [SHOI2007]善意的投票
思路 简单的最小割模型 最小割的模型就是选出一些边,把点集划分成S和T两个部分,使得代价最小 到这题上就是板子了 代码 #include <cstdio> #include <alg ...
- 18 Issues in Current Deep Reinforcement Learning from ZhiHu
深度强化学习的18个关键问题 from: https://zhuanlan.zhihu.com/p/32153603 85 人赞了该文章 深度强化学习的问题在哪里?未来怎么走?哪些方面可以突破? 这两 ...
- 论文笔记:Parallel Tracking and Verifying: A Framework for Real-Time and High Accuracy Visual Tracking
Parallel Tracking and Verifying: A Framework for Real-Time and High Accuracy Visual Tracking 本文目标在于 ...