文章转载自: 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 自定义图标的更多相关文章

  1. easyui tree 更改图标

    easyui tree 更改图标 ,onLoadSuccess: function (node, data) { $('#tt .tree-icon').css("background&qu ...

  2. easyui之自定义字体图标(鼠标覆盖时切换颜色)

    项目要求是自定义字体图标,使用easyui框架结构,众所周知easyui强功能弱样式,字体图标其实就是一张图片.要达到切换图标颜色的效果,要么就是有两套图,使用js控制.但是我这个人比较懒,不喜欢做复 ...

  3. 【EasyUI学习-2】Easyui Tree的异步加载

    作者:ssslinppp       1. 摘要 2. tree的相关介绍 3. 异步加载tree数据,并实现tree的折叠展开 3.1 功能说明: 3.2 前台代码 3.3 后台代码 4. 其他 1 ...

  4. [转]easyui tree 模仿ztree 使用扁平化加载json

    原文地址:http://my.oschina.net/acitiviti/blog/349377 参考文章:http://www.jeasyuicn.com/demo/treeloadfilter.h ...

  5. Jquery easyui tree的使用

    这个ui用的一切都是json数据.树也是如此! 后台需要返回与格式匹配的json数据才能正确加载树. 页面定义一个ui: <ul id="messageInfoAddTree" ...

  6. EasyUI –tree、combotree学习总结

    EasyUI –tree.combotree学习总结 一.   tree总结 (一).tree基本使用 tree控件是web页面中将数据分层一树形结构显示的. 使用$.fn.tree.defaults ...

  7. 【原】无脑操作:EasyUI Tree实现左键只选择叶子节点、右键浮动菜单实现增删改

    Easyui中的Tree组件使用频率颇高,经常遇到的需求如下: 1.在树形结构上,只有叶子节点才能被选中,其他节点不能被选中: 2.在叶子节点上右键出现浮动菜单实现新增.删除.修改操作: 3.在非叶子 ...

  8. 重写TreeView,自定义图标,生成通行的下划线,取消默认获得焦点失去焦点的效果,并支持拖拽节点到外界

    1.运行效果: 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.VideoTreeControl" xmlns="ht ...

  9. 数据网格和树-EasyUI Datagrid 数据网格、EasyUI Propertygrid 属性网格、EasyUI Tree 树、EasyUI Treegrid 树形网格

    EasyUI Datagrid 数据网格 扩展自 $.fn.panel.defaults.通过 $.fn.datagrid.defaults 重写默认的 defaults. 数据网格(datagrid ...

随机推荐

  1. Tree Implementation with Python

    Tree Implementation with Python List of List 代码如下: def binary_tree(val): return [val, [], []] def in ...

  2. linux检查系统CPU,内存,磁盘使用率

    #!/bin/bash CPU=`top -bn 1 -i -c | sed -n '3p' | awk -F ':' '{print$2}' | awk '{print$1}'` MEM=`free ...

  3. How to use Junit Listener

    JUnit Listeners If you want to do some operations when your tests are started, passed, finished, fai ...

  4. topcoder srm 450 div1

    problem1 link 用$f[i][0],f[i][1]$表示从$i$位置开始Alice是先手是否可以胜利,是后手是否可以胜利. problem2link 每次钱数够$price$时可以选择使得 ...

  5. maven项目更新之后,JDK版本成为1.5

    描述:maven项目更新之后,JDK版本成为1.5? 解决:在pom.xml文件中配置java版本,选中build path 设置之后,刷新maven项目

  6. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(4)

    6.Options TCustomDADataSet的选择项为TDADataSetOptions,其成员介绍如下表 : 名称 类型 说明 TDADataSetOptions AutoPrepare B ...

  7. vscode Git:failed to execute git

    在vscoad中选择全部提交时候提示 Git:failed to execute git在git日志中会看到这么一行错误信息 empty ident name (for <XXXXXX.com& ...

  8. golang解析json配置文件

    安装 go get github.com/akkuman/parseConfig 使用说明 环境假设 . ├── config.go ├── config.json config.json内容 { & ...

  9. centos7 mail

    For anyone wondering how to read these messages one by one, you can just use 'mail' $ mail Then type ...

  10. P4091 [HEOI2016/TJOI2016]求和

    留待警戒 FFT的时候长度要写的和函数里一样啊XD 瞎扯 这是个第二类斯特林数的理性愉悦颓柿子题目 颓柿子真的是让我hi到不行啦(才没有) 前置芝士 一个公式 \[ \sum_{i=0}^n t^i ...