tree.ftl 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. <#-- 树形控件,以input下拉框的形式显示(官网:http://www.ztree.me/v3/main.php#_zTreeInfo) -->
  2. <#-- treeId(必须):树形加载和控制区域的ID,一张页面同时加载多个树形时必须用该值进行区分 -->
  3. <#-- json(必须):需要加载成树形的数据,数据结构为:[{categoryId:1,categoryCategoryId:0,categoryTitle:""},{categoryId:2,categoryCategoryId:1,categoryTitle:""}] -->
  4. <#-- jsonId(必须):json数据中ID名称,如:categoryId -->
  5. <#-- jsonPid(必须):json数据中关联的父ID,如:categoryCategoryId -->
  6. <#-- jsonName(必须):json数据中需要显示的数据名称,如:categoryTitle -->
  7. <#-- jsonUrl:如过json数据中存在跳转地址则直接将字段名称填入点击树形时可自动跳转 -->
  8. <#-- addNodesName:增加顶级根节点,直接传入根节点名称即可。如:顶级分类 -->
  9. <#-- buttonText:选择框加载的默认提示信息 -->
  10. <#-- inputName(必须):隐藏input框的name值,用于保存选中数据的ID -->
  11. <#-- inputValue:隐藏input框的val默认值,适用用于加载初始化数据 -->
  12. <#-- inputId:隐藏input框的id值,用于保存选中数据的ID -->
  13. <#-- selectParent:用户选择父节点时的提示信息,当该值存在时,用户不能选择存在子节点的父节点,并提示传入的值,当该值不存在时用户可以选择任意 -->
  14. <#-- clickZtreeId: 选择节点后触发的事件-->
  15. <#-- expandAll:控制节点数据显示的时候是全部展开还是全部折叠(true[默认]:全部展开,false:全部折叠)。 -->
  16. <#-- showIcon:是否显示文件夹图标,true:显示;false(默认):不显示 -->
  17. <#-- 内置函数调用方法说明:
  18. 调用对象的函数名: zTreeObj${treeId}(treeId为自定义的ID名称);
  19. /**
  20. * 根据节点数据的属性搜索,获取条件完全匹配的单一节点数据 JSON 对象
  21. * 如有重复则返回最近的一条。
  22. * @param key:需要精确匹配的属性名称
  23. * @param value:需要精确匹配的属性值,可以是任何类型,只要保证与 key 指定的属性值保持一致即可
  24. * @param parentNodeJSON:搜索范围,指定在某个父节点下的子节点中进行搜索忽略此参数,为null时表示在全部节点中搜索
  25. * @return JSON
  26. */
  27. zTreeObj${treeId}.getNodeByParam(key,value,parentNode);
  28. /**
  29. * 获取根节点数据,既获取PID=0的数据集合
  30. * @return ArrayList(json)
  31. */
  32. zTreeObj${treeId}.getNodes();
  33. /**
  34. * 根据节点数据的属性搜索,获取条件完全匹配的节点数据 JSON 对象集合
  35. * @param key:需要精确匹配的属性名称
  36. * @param value:需要精确匹配的属性值,可以是任何类型,只要保证与 key 指定的属性值保持一致即可
  37. * @param parentNode:可以指定在某个父节点下的子节点中搜索,为null时表示在全部节点中搜索
  38. * @return ArrayList(json)
  39. */
  40. zTreeObj${treeId}.getNodesByParam(key,value,parentNode);
  41. -->
  42. <#--废弃,推荐使用inputTree 参考input_tree.ftl-->
  43. <#macro treeInput treeId="" json="" jsonId="" jsonPid="" jsonName="" jsonUrl="" addNodesName="" buttonText="" inputName="" inputValue="" inputId="" selectParent="" clickZtreeId="" expandAll="true" showIcon="false" >
  44. <!-- css样式开始 -->
  45. <style type="text/css">
  46. .ztree${treeId}{width:100%;max-height: 240px;overflow:auto;}
  47. .ztree${treeId} li a{padding:0}
  48. </style>
  49. <!-- css样式结束 -->
  50. <!-- 初始化样式开始 -->
  51. <div class="dropdown" id="${treeId}">
  52. <button type="text" id="treeLabel${treeId}" class="form-control dropdown-toggle" data-toggle="dropdown" aria-expanded="true" style="text-align:left">
  53. ${buttonText?default('请选择')}
  54. </button>
  55. <input type="hidden" <#if inputName?has_content>name="${inputName}"</#if> <#if inputId?has_content>id="${inputId}"</#if> value="${inputValue?default(0)}">
  56. <ul class="ztree ztree${treeId} dropdown-menu" role="menu" id="treeDome${treeId}" aria-labelledby="treeLabel${treeId}">
  57. </ul>
  58. </div>
  59. <!-- 初始化样式结束 -->
  60. <!-- js操作方法开始 input -->
  61. <script>
  62. //初始化树形数据
  63. var zNodes${treeId} = <#if json?has_content>${json}<#else>[]</#if>;
  64. //初始化树形结构
  65. var setting${treeId} = {
  66. view:{//控制视图
  67. fontCss:{"white-space":"normal","display":"initial","word-break":"break-all"},
  68. showIcon:${showIcon},//是否显示节点文件夹图标
  69. showLine:true,//是否显示借点连接线
  70. expandSpeed:"",//折叠时的动画速度,参考jquery中动画效果的speed参数,三种预定速度之一的字符串("slow", "normal", or "fast")
  71. },
  72. data: {//控制显示数据
  73. simpleData: {
  74. enable: true,//是否采用简单数据模式 (Array)
  75. idKey:"${jsonId}",//节点ID名称
  76. pIdKey:"${jsonPid}",//父节点ID名称
  77. },
  78. key:{
  79. name:"${jsonName}",//节点数据保存节点名称的属性名称。
  80. url:"${jsonUrl}",//节点跳转地址属性
  81. }
  82. },
  83. callback: {//控制获取选择的节点数据
  84. beforeClick:<#if selectParent?has_content>beforeClick${treeId}<#else>null</#if>,//用于捕获单击节点之前的事件回调函数,并且根据返回值确定是否允许单击操作
  85. onClick:getZtreeId${treeId},//用于捕获节点被点击的事件回调函数
  86. },
  87. check:{//控制节点的选中方式(暂时未启用,根据后期需求再做调整)
  88. autoCheckTrigger:true,//是否触发自动勾选
  89. enable:false,//节点上是否显示选择框,false:不显示,true:显示。
  90. chkStyle:"checkbox",//勾选框类型(checkbox[默认值] 或 radio)
  91. chkboxType:{"Y":"ps","N":"ps"},//设置勾选关联关系
  92. },
  93. };
  94. var zTreeObj${treeId}="";
  95. $(function(){
  96. //自定义顶级栏目
  97. <#if addNodesName?has_content>
  98. zNodes${treeId}[zNodes${treeId}.length] = {${jsonName}:"${addNodesName}",${jsonId}:0,${jsonPid}:0};
  99. </#if>
  100. //加载树形
  101. $.fn.zTree.init($("#treeDome${treeId}"),setting${treeId},zNodes${treeId});
  102. //zTree内部函数对象,主要用户调用zTree内部方法
  103. zTreeObj${treeId} = $.fn.zTree.getZTreeObj("treeDome${treeId}");
  104. //展开(true)/折叠(false)全部节点(zTree内部方法)
  105. zTreeObj${treeId}.expandAll(${expandAll});
  106. //加载默认节点
  107. <#if inputValue?has_content>
  108. zTreeObj${treeId}.selectNode(zTreeObj${treeId}.getNodeByParam("${jsonId}",${inputValue},null));
  109. </#if>
  110. //当属性为折叠时,控制下拉菜单的开启和关闭
  111. <#if expandAll = "false">
  112. $("body").on("click",function(e) {
  113. e = window.event || e; // 兼容IE7
  114. //获取当前点击事件对象
  115. var objZtree = $(e.srcElement||e.target);
  116. //获取当前点击事件ID,并对点击的子节点ID进行切割获取自定义ID
  117. var objZtreeId = objZtree.attr("id");
  118. //当用户点击选择框时还原下拉框属性
  119. if(objZtreeId != undefined && objZtreeId.split("_")[0] == "treeLabel${treeId}"){
  120. $("#treeDome${treeId}").attr("style","");
  121. return ;
  122. }
  123. //切割获取到的ID判断点击事件是否产生在下拉框
  124. if(objZtreeId != undefined && objZtreeId.split("_")[0] == "treeDome${treeId}"){
  125. $("#treeDome${treeId}").attr("style","display:block");
  126. }else{
  127. $("#treeDome${treeId}").attr("style","display:none");
  128. }
  129. });
  130. </#if>
  131. });
  132. <#if selectParent?has_content>
  133. //对节点选择进行限制,用户只能选择子节点
  134. function beforeClick${treeId}(treeId,treeNode) {
  135. var check = (treeNode && !treeNode.isParent);
  136. if (!check){
  137. $("#treeLabel${treeId}").text("${selectParent}");
  138. };
  139. return check;
  140. }
  141. </#if>
  142. //获取树形中选中的值,将选择值加载到隐藏框中
  143. function getZtreeId${treeId}(event,treeId,treeNode){
  144. var booleanClick = true;
  145. //用于捕获节点被点击的事件回调函数
  146. <#if clickZtreeId?has_content>
  147. booleanClick=${clickZtreeId};
  148. </#if>
  149. if(booleanClick==false){
  150. return;
  151. }
  152. //将用户选择数据ID加载到隐藏框
  153. $("#${treeId} input[name='${inputName}']").val(treeNode.${jsonId});
  154. //将用户选择数据的名称加载到输入框
  155. $("#treeLabel${treeId}").text(treeNode.${jsonName});
  156. }
  157. </script>
  158. <!-- js操作方法结束 -->
  159. </#macro>
  160. <#------------------------------------------------------------------------------------------------------------------------------------------------------------------>
  161. <#--
  162. getZtreeId:外部重写JS方法:
  163. /**
  164. * 外部点击树形节点时触发的事件,(传入参数必须与下述参数名保持一致)
  165. * event:获取到的触发事件
  166. * treeId:载体ID,这里为:treeDome${treeId}
  167. * treeNode:内置函数对象,这里可直接调用内置函数方法
  168. * treeNode.${jsonId}:获取点击的树形节点的ID
  169. * treeNode.${jsonName}:获取点击树形节点的名称
  170. * .....
  171. */
  172. getZtreeId${treeId}(event,treeId,treeNode);
  173. -->
  174. <#-- 树形控件,以input下拉框的形式显示(官网:http://www.ztree.me/v3/main.php#_zTreeInfo) -->
  175. <#-- treeId(必须):树形加载和控制区域的ID,一张页面同时加载多个树形时必须用该值进行区分 -->
  176. <#-- json(必须):需要加载成树形的数据,数据结构为:[{categoryId:1,categoryCategoryId:0,categoryTitle:""},{categoryId:2,categoryCategoryId:1,categoryTitle:""}] -->
  177. <#-- jsonId(必须):json数据中ID名称,如:categoryId -->
  178. <#-- jsonPid(必须):json数据中关联的父ID,如:categoryCategoryId -->
  179. <#-- jsonName(必须):json数据中需要显示的数据名称,如:categoryTitle -->
  180. <#-- jsonUrl:如过json数据中存在跳转地址则直接将字段名称填入点击树形时可自动跳转 -->
  181. <#-- addNodesName:增加顶级根节点,直接传入根节点名称即可。如:顶级分类 -->
  182. <#-- expandAll:控制节点数据显示的时候是全部展开还是全部折叠(true[默认]:全部展开,false:全部折叠)。 -->
  183. <#-- showIcon:是否显示文件夹图标,true:显示;false(默认):不显示 -->
  184. <#-- 内置函数调用方法说明:
  185. 调用对象的函数名: zTreeObj${treeId}(treeId为自定义的ID名称);
  186. /**
  187. * 根据节点数据的属性搜索,获取条件完全匹配的单一节点数据 JSON 对象
  188. * 如有重复则返回最近的一条。
  189. * @param key:需要精确匹配的属性名称
  190. * @param value:需要精确匹配的属性值,可以是任何类型,只要保证与 key 指定的属性值保持一致即可
  191. * @param parentNodeJSON:搜索范围,指定在某个父节点下的子节点中进行搜索忽略此参数,为null时表示在全部节点中搜索
  192. * @return JSON
  193. */
  194. zTreeObj${treeId}.getNodeByParam(key,value,parentNode);
  195. /**
  196. * 获取根节点数据,既获取PID=0的数据集合
  197. * @return ArrayList(json)
  198. */
  199. zTreeObj${treeId}.getNodes();
  200. /**
  201. * 根据节点数据的属性搜索,获取条件完全匹配的节点数据 JSON 对象集合
  202. * @param key:需要精确匹配的属性名称
  203. * @param value:需要精确匹配的属性值,可以是任何类型,只要保证与 key 指定的属性值保持一致即可
  204. * @param parentNode:可以指定在某个父节点下的子节点中搜索,为null时表示在全部节点中搜索
  205. * @return ArrayList(json)
  206. */
  207. zTreeObj${treeId}.getNodesByParam(key,value,parentNode);
  208. -->
  209. <#macro tree id="ztree${.now?string('yyyyMMddhhmmss')}" type="default" data=[] url="" idKey="" pIdKey="" text="" label="" treeId="" json="" jsonId="" jsonPid="" jsonName="" jsonUrl="" validation="" addNodesName="" expandAll="true" showIcon="false" getZtreeId="" ischeck="false" help="">
  210. <#if type="checkbox">
  211. <ul id="${id}" class="ztree"></ul>
  212. <SCRIPT type="text/javascript">
  213. <!--
  214. var ${id};
  215. ms.post("${url}",null,function(json){
  216. var setting = {
  217. check: {
  218. enable: true,
  219. chkboxType: { "Y" : "ps", "N" : "ps" }
  220. },
  221. data: {
  222. simpleData: {
  223. enable: true,//是否采用简单数据模式 (Array)
  224. idKey:"${idKey}",//节点ID名称
  225. pIdKey:"${pIdKey}",//父节点ID名称
  226. },
  227. key:{
  228. name:"${text}"//节点数据保存节点名称的属性名称。
  229. }
  230. }
  231. };
  232. $(document).ready(function(){
  233. $.fn.zTree.init($("#${id}"), setting, json);
  234. ${id} = $.fn.zTree.getZTreeObj("${id}");
  235. ${id}.expandAll(true);
  236. });
  237. });
  238. //-->
  239. </SCRIPT>
  240. <#elseif type=="default"> <#--默认调用方式在4.5.5将废弃-->
  241. <!-- 初始化样式开始 -->
  242. <div class="form-group ms-form-group ">
  243. <#include "control.ftl"/><#rt/>
  244. <div class="ms-form-control <#if label!="">col-sm-9</#if>">
  245. <ul class="ztree" id="treeDome${treeId}">
  246. </ul>
  247. </div>
  248. </div>
  249. <!-- 初始化样式结束 -->
  250. <!-- js操作方法开始 tree-->
  251. <script>
  252. //初始化树形数据
  253. var zNodes${treeId} = ${json?default('[]')};
  254. var zTreeObj${treeId};
  255. //初始化树形结构
  256. var setting${treeId} = {
  257. view:{//控制视图
  258. fontCss:{"white-space":"normal","display":"initial","word-break":"break-all"},
  259. showIcon:${showIcon},//是否显示节点文件夹图标
  260. showLine:true,//是否显示借点连接线
  261. expandSpeed:"fast",//折叠时的动画速度,参考jquery中动画效果的speed参数,三种预定速度之一的字符串("slow", "normal", or "fast")
  262. },
  263. data: {//控制显示数据
  264. simpleData: {
  265. enable: true,//是否采用简单数据模式 (Array)
  266. idKey:"${jsonId}",//节点ID名称
  267. pIdKey:"${jsonPid}",//父节点ID名称
  268. },
  269. key:{
  270. name:"${jsonName}",//节点数据保存节点名称的属性名称。
  271. url:"${jsonUrl}",//节点跳转地址属性
  272. }
  273. },
  274. callback: {//控制获取选择的节点数据
  275. onClick:<#if getZtreeId?has_content>getZtreeId${treeId}<#else>null</#if>,//用于捕获节点被点击的事件回调函数
  276. },
  277. check:{//控制节点的选中方式(暂时未启用,根据后期需求再做调整)
  278. autoCheckTrigger:true,//是否触发自动勾选
  279. enable:${ischeck},//节点上是否显示选择框,false:不显示,true:显示。
  280. chkStyle:"checkbox",//勾选框类型(checkbox[默认值] 或 radio)
  281. chkboxType:{"Y":"ps","N":"ps"},//设置勾选关联关系
  282. },
  283. };
  284. $(function(){
  285. //自定义顶级栏目
  286. <#if addNodesName?has_content>
  287. zNodes${treeId}[zNodes${treeId}.length] = {${jsonName}:"${addNodesName}",${jsonId}:0,${jsonPid}:0};
  288. </#if>
  289. //加载树形
  290. $.fn.zTree.init($("#treeDome${treeId}"),setting${treeId},zNodes${treeId});
  291. //zTree内部函数对象,主要用户调用zTree内部方法
  292. zTreeObj${treeId} = $.fn.zTree.getZTreeObj("treeDome${treeId}");
  293. //展开(true)/折叠(false)全部节点(zTree内部方法)
  294. zTreeObj${treeId}.expandAll(${expandAll});
  295. });
  296. <#if getZtreeId?has_content>
  297. function getZtreeId${treeId}(event,treeId,treeNode){
  298. ${getZtreeId};
  299. }
  300. </#if>
  301. </script>
  302. <!-- js操作方法结束 -->
  303. </#if>
  304. </#macro>
  305. <#-------------------------------------------------------------------------- -->
  306. <#-- 树形控件,树形结构table 格式-->
  307. <#-- tbodyId(必须) 需要进行委派的容器Id, 如要委派到tbody的id值-->
  308. <#-- treeId(必须):树形加载和控制区域的ID,一张页面同时加载多个树形时必须用该值进行区分 -->
  309. <#-- json(必须):需要加载成树形的数据,数据结构为:[{categoryId:1,categoryCategoryId:0,categoryTitle:""},{categoryId:2,categoryCategoryId:1,categoryTitle:""}] -->
  310. <#-- jsonId(必须):json数据中ID名称,如:categoryId -->
  311. <#-- jsonPid(必须):json数据中关联的父ID,如:categoryCategoryId -->
  312. <#-- jsonName(必须):json数据中需要显示的数据名称,如:categoryTitle -->
  313. <#-- tmplBefored是否插入节点图标之前 false不插入, true插入-->
  314. <#-- #befored${treeId} 在节点图标之前需要插入列表属性,如果要使用必须tmplBefored="true"-->
  315. <#-- #after${treeId}(必须) 在节点图标之后需要插入列表属性-->
  316. <#-- 该结构中调用方法简略说明,如果需要其他更改,请添加方法:
  317. clickDome${treeId},展开节点|关闭节点
  318. getChilds${treeId},获取当前点击的子节点
  319. removeChilds${treeId},/移除点击节点的所有子节点
  320. -->
  321. <#macro treeTable tbodyId="" treeId="" json="" jsonId="" jsonPid="" jsonName="" style="" tmplBefored="false">
  322. <ul class="ztreeTable" id="treeDome${treeId}" style="display:none">
  323. </ul>
  324. <!-- 列表HTML模版开始 -->
  325. <script id="treeTableTmpl${treeId}" type="text/x-jquery-tmpl">
  326. <tr data-id="{{= ${jsonId}}}" id="columnTitle{{= ${jsonId}}}" >
  327. <td>{{= ${jsonId}}}</td>
  328. <#if tmplBefored== "true" >
  329. {{tmpl($data) '#befored${treeId}'}}
  330. </#if>
  331. <td>
  332. <a class="btn btn-xs red tooltips switch-list columnTitle" data-id="{{= ${jsonId}}}" onclick="clickDome${treeId}(this)" data-parentId="{{= ${jsonPid}}}" data-toggle="tooltip" data-original-title="查看子节点">
  333. <i class="glyphicon glyphicon-folder-close"></i>
  334. </a>
  335. {{= ${jsonName}}}
  336. </td>
  337. {{tmpl($data) '#after${treeId}'}}
  338. </tr>
  339. </script>
  340. <!-- 列表HTML模版结束 -->
  341. <!-- js操作方法开始 -->
  342. <script>
  343. var zTreeObj${treeId}; //zTree内部函数对象变量,主要用户调用zTree内部方法
  344. //初始化树形结构
  345. var setting${treeId} = {
  346. data: {//控制显示数据
  347. simpleData: {
  348. enable: true,//是否采用简单数据模式 (Array)
  349. idKey:"${jsonId}",//节点ID名称
  350. pIdKey:"${jsonPid}",//父节点ID名称
  351. },
  352. key:{
  353. name:"${jsonName}",//节点数据保存节点名称的属性名称。
  354. }
  355. },
  356. };
  357. $(function(){
  358. //初始化树形数据
  359. var zNodes${treeId} = ${json?default('[]')};
  360. //加载树形
  361. $.fn.zTree.init($("#treeDome${treeId}"),setting${treeId},zNodes${treeId});
  362. //zTree内部函数对象,主要用户调用zTree内部方法
  363. zTreeObj${treeId} = $.fn.zTree.getZTreeObj("treeDome${treeId}");
  364. //获取zTree中的数据对象
  365. var zTreeList = zTreeObj${treeId}.getNodes();
  366. //将内容委派到其中
  367. $("#treeTableTmpl${treeId}").tmpl(zTreeList).appendTo("#${tbodyId}");
  368. });
  369. //展开节点|关闭节点
  370. function clickDome${treeId}(obj){
  371. var columnId = $(obj).attr("data-id");//当前点击的节点
  372. var booleanBeging= true; //用来处理是否展开/关闭节点
  373. $(".columnTitle").each(function(){ //判断是否存在子节点
  374. if($(this).attr("data-parentId")==columnId){
  375. booleanBeging=false;
  376. return false;
  377. }
  378. });
  379. //判断节点文件夹关闭图标是否存在,存在则显示打开的文件夹图标
  380. if($(obj).find(".glyphicon").hasClass("glyphicon-folder-close")){
  381. $(obj).find(".glyphicon").removeClass("glyphicon-folder-close");
  382. $(obj).find(".glyphicon").addClass("glyphicon-folder-open");
  383. }else if($(obj).find(".glyphicon").hasClass("glyphicon-folder-open")){//判断节点文件夹打开图标是否存在,存在则显示关闭的文件夹图标
  384. $(obj).find(".glyphicon").removeClass("glyphicon-folder-open")
  385. $(obj).find(".glyphicon").addClass("glyphicon-folder-close");
  386. }
  387. if(booleanBeging==true){
  388. getChilds${treeId}(columnId);//获取当前点击的子节点
  389. }else{
  390. removeChilds${treeId}(columnId);//移除点击节点的子节点
  391. }
  392. }
  393. //获取当前点击的子节点
  394. function getChilds${treeId}(jsonId){
  395. //拿到所有节点,比对该节点内是否存在父节点id跟当前点击节点id一致,累加到数组内容,循环完毕后委派到html内
  396. var rootNodes=zTreeObj${treeId}.getNodes(); //获取根节点
  397. var allNodes=zTreeObj${treeId}.transformToArray(rootNodes); //很据跟节点获取所有节点
  398. var selectNodes; //选中的节点
  399. var arrayNodes = new Array(); //需要委派的节点
  400. for(var i=0;i<allNodes.length;i++){//将所有节点选中
  401. zTreeObj${treeId}.selectNode(allNodes[i],true);
  402. }
  403. selectNodes=zTreeObj${treeId}.getSelectedNodes();
  404. for(var j=0;j<selectNodes.length;j++){ //判断是否是当前点击的节点的子节点
  405. if(selectNodes[j].${jsonPid}== jsonId ){
  406. arrayNodes.push(selectNodes[j]);
  407. }
  408. }
  409. $("#treeTableTmpl${treeId}").tmpl(arrayNodes).insertAfter("#columnTitle"+jsonId);
  410. //文字首行缩进
  411. $(".columnTitle").each(function(){
  412. var id = $(this).attr("data-id");
  413. var curChilds = zTreeObj${treeId}.getNodesByParam("${jsonId}",id,null);
  414. var indent = curChilds[0].level;
  415. $(this).parents("td").css("text-indent",(indent*5)+"px");
  416. });
  417. }
  418. //移除点击节点的子节点
  419. function removeChilds${treeId}(jsonId){
  420. $(".columnTitle").each(function(){
  421. if($(this).attr("data-parentId")==jsonId){
  422. removeChilds${treeId}($(this).attr("data-id"));
  423. $("#columnTitle"+$(this).attr("data-id")).detach();
  424. }
  425. });
  426. }
  427. </script>
  428. <!-- js操作方法结束 -->
  429. </#macro>