bindEventHandler = function(obj, evtName, func) { var args = new Array(arguments.length - 3); for (var i = 0; i < args.length; i ++) { args[i] = arguments[i + 3]; } if ($.browser.msie) { obj.attachEvent("on" + evtName, function(evt){ args[args.length] = window.event; return func.apply(obj, args)} ); } else { obj.addEventListener(evtName, function(evt){ args[args.length] = evt; return func.apply(obj, args)}, false); } } findChildByTagName = function(obj, tagName) { var children = obj.childNodes; for (var i = 0; i < children.length; i++) { if (children[i].tagName == tagName) { return children[i]; } } } jQuery.fn.hcksTree = function(options) { $(this).each(function(){ var tree = new HcksTreeview($(this), options); if (options && options.loadImmediate) { tree.asynInitChildNodes(null); } }); }; jQuery.fn.contextMenu = function(options) { var menu = new HcksMenu(options); $(this).bind("contextmenu", function(e) { menu.show(e); return false; }); return this; }; /** * 菜单 * @param {} options */ function HcksMenu(options) { var extraParams = null; var menu = document.createElement("DIV"); menu.className = "hcks-menu"; document.body.appendChild(menu); var $menu = $(menu); $menu.bind("click", function(e) { e.stopPropagation(); }); var ul = document.createElement("UL"); menu.appendChild(ul); var shadow = document.createElement("DIV"); shadow.className = "hcks-menu-shadow"; document.body.appendChild(shadow); function hide() { menu.style.display = "none"; shadow.style.display = "none"; } this.setExtraParams = function(params) { extraParams = params; } this.addItem = function(menuItem) { var item = document.createElement("LI"); $(item).attr("command", menuItem.command).hover( function() { $(this).addClass("menuitem-hover"); }, function(){ $(this).removeClass("menuitem-hover"); } ); if (options && typeof(options.handler) == 'function') { $(item).click(function(evt){ options.handler.call(this, menuItem.command, extraParams); hide(); extraParams = null; }); } var icon = document.createElement("img"); icon.src = __CONTEXT_PATH + "/resource/images/icons/" + menuItem.icon; item.appendChild(icon); item.appendChild(document.createTextNode(menuItem.text)); ul.appendChild(item); } if (options && options.menus) { for (var cmd in options.menus) { var mi = options.menus[cmd]; mi.command = cmd; this.addItem(mi); } } this.show = function(e, commands) { var mustShow = true; if (commands) { mustShow = false; $menu.find("li").each(function(){ if (commands.indexOf($(this).attr("command")) == -1) { $(this).hide(); } else { $(this).show(); mustShow = true; } }); } if (mustShow) { var x = e.pageX ? e.pageX : e.clientX; var y = e.pageY ? e.pageY : e.clientY; if (!e.pageX) { var doc = document.documentElement, body = document.body; x = x + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0); y = y + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0); } $menu.css({'left':x, 'top':y}).show(); $(shadow).css({width:$menu.width(),height:$menu.height(),left:x+2,top:y+2}).show(); $(document).one('click', hide); } } } /** * 树 * @param {} container * @param {} options */ function HcksTreeview(container, options) { var loading = false; var rootNode = $("").addClass("x-tree-root-ct"); options.name = options.name || ""; options.parentName = options.parentName || "parentId"; options.valueName = options.valueName || "value"; options.showLine = options.showLine || true; options.loadingMessage = options.loadingMessage || "正在加载,请稍候..."; if (options.showLine) { rootNode.addClass("x-tree-lines"); } else { rootNode.addClass("x-tree-no-lines"); } var loadingMessage = document.createElement("LI"); loadingMessage.className = "x-tree-loading"; loadingMessage.innerHTML = options.loadingMessage; if (typeof(container) == 'string') { container = $("#" + container); } else { container = $(container); } container.addClass("x-hcks-tree").append(rootNode); container.bind("contextmenu", function(e){e.stopPropagation(); return false;});//阻止事件冒泡 if ($.browser.msie) { container.addClass("ext-ie");//不显示超过容器尺寸的内容 container.get(0).onselectstart = function(){return false} } this.selectedNode = null; var blankImg = function() { var img = document.createElement("IMG"); img.src = __BLANK_IMAGE; return img; } var isLeaf = function(node) { return node.children("div").hasClass("x-tree-node-leaf"); } var fixNode = function(node) { if (!node) return null; if (typeof(node) == 'string') { node = $("#" + node); } else { node = $(node); } return node; } var setToLeaf = function(node) { var div = node.children("div:first");//查找节点下首个div块 var handlerIcon = div.children("img:first"); if (handlerIcon.hasClass("x-tree-elbow-end-minus") || handlerIcon.hasClass("x-tree-elbow-end-plus")) { handlerIcon.removeClass("x-tree-elbow-end-minus").removeClass("x-tree-elbow-end-plus"); handlerIcon.addClass("x-tree-elbow-end"); } else if (handlerIcon.hasClass("x-tree-elbow-plus") || handlerIcon.hasClass("x-tree-elbow-minus")) { handlerIcon.removeClass("x-tree-elbow-plus").removeClass("x-tree-elbow-minus"); handlerIcon.addClass("x-tree-elbow"); } var icon = div.children("img:last"); if (icon.attr("src") != __BLANK_IMAGE) { if (icon.attr("collapsedIcon")) { icon.attr("src", icon.attr("collapsedIcon")); } } else { div.removeClass("x-tree-node-expanded").addClass("x-tree-node-collapsed"); } } this.setToFolder = function(node) { node = fixNode(node); alert(node.html()); var div = node.children("div:first");//查找节点下首个div块 var handlerIcon = div.children("img:first"); if (handlerIcon.hasClass("x-tree-elbow-end")) { handlerIcon.removeClass("x-tree-elbow-end"); handlerIcon.addClass("x-tree-elbow-end-plus"); } else if (handlerIcon.hasClass("x-tree-elbow") ) { handlerIcon.removeClass("x-tree-elbow"); handlerIcon.addClass("x-tree-elbow-plus"); } // if (handlerIcon.hasClass("x-tree-elbow-end-minus") || handlerIcon.hasClass("x-tree-elbow-end-plus")) { // handlerIcon.removeClass("x-tree-elbow-end-minus").removeClass("x-tree-elbow-end-plus"); // handlerIcon.addClass("x-tree-elbow-end"); // } else if (handlerIcon.hasClass("x-tree-elbow-plus") || handlerIcon.hasClass("x-tree-elbow-minus")) { // handlerIcon.removeClass("x-tree-elbow-plus").removeClass("x-tree-elbow-minus"); // handlerIcon.addClass("x-tree-elbow"); // } var icon = div.children("img:last"); if (icon.attr("src") != __BLANK_IMAGE) { if (icon.attr("expandedIcon")) { icon.attr("src", icon.attr("expandedIcon")); } } else { div.removeClass("x-tree-node-collapsed").addClass("x-tree-node-expanded"); } } this.clear = function(node) { rootNode.empty(); rootNode.get(0).innerHTML = ""; } this.expanded = function(node) { node = fixNode(node); var handlerIcon = node.children("div:first").children("img:first"); return handlerIcon.hasClass("x-tree-elbow-minus") || handlerIcon.hasClass("x-tree-elbow-end-minus"); } this.collapsed = function(node) { node = fixNode(node); var handlerIcon = node.children("div:first").children("img:first"); return handlerIcon.hasClass("x-tree-elbow-plus") || handlerIcon.hasClass("x-tree-elbow-end-plus"); } this.asynInitChildNodes = function(pNode, extraParams, dynamic, asyn, recursive) { if (typeof(asyn) == 'undefined') asyn = true; if (loading && asyn) return; if (!options.url) return; var node = fixNode(pNode); var root = node == null; var loadingContainer = root ? rootNode : node.children("ul").show(); loadingContainer.append(loadingMessage); var tree = this; var params = {}; if (!root) { params[options.parentName] = this.getNodeAttr(node, "id"); params[options.valueName] = this.getNodeAttr(node, "value"); params["checked"] = this.getNodeAttr(node, "checked"); } if (options.extraParams) { for (var k in options.extraParams) { params[k] = options.extraParams[k]; } } if (extraParams) { for (var k in extraParams) { params[k] = extraParams[k]; } } loading = true; if (options && typeof(options.beforeAsyn) == 'function') { options.beforeAsyn.call(tree, node, params); } $.ajax({ url:options.url, data:params, type:'post', cache:false, async: (typeof(asyn) == 'undefined'? true:asyn), success:function(data) { loadingContainer.empty(); loadingContainer.innerHTML = ""; if (!root) { node.attr("init", 'y'); } try { var nodesData = eval(data); if (dynamic == false) { tree.initalize(nodesData, node == null ? null : node.children("ul:last").get(0), node == null ? 0 : parseInt(node.attr("level")) + 1, asyn, recursive); } else { for(var i = 0; i < nodesData.length; i++) { var nodeData = nodesData[i]; var newNode = tree.addNode(nodeData, node); if (newNode && newNode.getAttribute("init") == "n" && recursive) { tree.asynInitChildNodes(newNode, extraParams, dynamic, asyn, recursive); } }; } if (! root ) { if (nodesData.length == 0) { setToLeaf(node); } else { tree.expand(node); ; } } } catch (e) { alert('程序发生意外错误!\n' + e.description) } }, complete:function() { tree = null; loading = false; } }); } /** * 展开当前节点 * @param {} node */ this.expand = function(node) { node = fixNode(node); if (node.attr("init") != 'y') { this.asynInitChildNodes(node, null, false); return; } var div = node.children("div:first"); var handlerIcon = div.children("img:first"); if (handlerIcon.hasClass("x-tree-elbow-end-plus")) { handlerIcon.removeClass("x-tree-elbow-end-plus").addClass("x-tree-elbow-end-minus"); } else if (handlerIcon.hasClass("x-tree-elbow-plus")) { handlerIcon.removeClass("x-tree-elbow-plus").addClass("x-tree-elbow-minus"); } var icon = div.children("img:last"); if (icon.attr("src") != __BLANK_IMAGE) { if (icon.attr("expandedIcon")) icon.attr("src", icon.attr("expandedIcon")); } else { div.removeClass("x-tree-node-collapsed").addClass("x-tree-node-expanded"); } node.attr("init", 'y'); var delay = options && options.delay ? options.delay : null; node.children("ul").show(delay); } this.collapse = function(node) { node = fixNode(node); if (node == null) return; var div = node.children("div:first"); var handlerIcon = div.children("img:first"); if (handlerIcon.hasClass("x-tree-elbow-end-minus")) { handlerIcon.removeClass("x-tree-elbow-end-minus").addClass("x-tree-elbow-end-plus"); } else if (handlerIcon.hasClass("x-tree-elbow-minus")) { handlerIcon.removeClass("x-tree-elbow-minus").addClass("x-tree-elbow-plus"); } var icon = div.children("img:last"); if (icon.attr("src") != __BLANK_IMAGE) { if (icon.attr("collapsedIcon")) icon.attr("src", icon.attr("collapsedIcon")); } else { div.removeClass("x-tree-node-expanded").addClass("x-tree-node-collapsed"); } var delay = options && options.delay ? options.delay : null; node.children("ul").hide(delay); } this.toggle = function(node) { if (this.expanded(node)) { this.collapse(node); } else if (this.collapsed(node)) { this.expand(node); } } /** * 设置节点属性 * @param {} node 节点 * @param {} attr 属性名称 * @param {} value 值 */ this.setNodeAttr = function(node, attr, value) { node = fixNode(node); if (attr == "text") { node.children("div:first").children("a").html(value); } else if (attr == "href") { node.children("div:first").children("a").attr(attr, value); } else if (attr == "target") { node.children("div:first").children("a").attr(attr, value); } else if (attr == "checked") { var checkImg = node.children("div:first").children("img:eq(1)"); if(value == true){ checkImg.removeClass("x-node-unchecked").addClass("x-node-check-all"); }else{ checkImg.removeClass("x-node-check-all").addClass("x-node-unchecked"); } }else { node.attr(attr, value); } } this.getNodeAttr = function(node, attr) { node = fixNode(node); if (node == null) return ""; if (attr == "text") { r = node.children("div:first").children("a").html(); } else if (attr == "value") { r = node.attr("val"); } else if (attr == "href" || attr == "target") { r = node.children("div:first").children("a").attr(attr); }else if (attr == "checked") { var checkImg = node.children("div:first").children("img:eq(1)"); r = checkImg.hasClass("x-node-check-all") || checkImg.hasClass("x-node-check-partly"); } else if (attr == "id") { r = node.attr(attr).substr(options.name.length); } else { r = node.attr(attr); } if (typeof(r) == 'undefined') { return ""; } return r; } this.getSelectedNode = function() { return this.selectedNode; } this.getCheckedNodes = function(fn) { return container.find("li.x-tree-node[canSelect='true']").filter( function() { var r = (typeof(fn) == 'undefined' || ($.isFunction(fn) && fn(this))) && $(this).children("div:first").children("img:eq(1)").hasClass("x-node-check-all"); return r; } ); } this.checkAll = function(visible) { if (visible) container.find("li.x-tree-node:visible img.x-node-unchecked").filter(function(){ return $(this).is(":visible") && $(this).parents("li.x-tree-node:hidden").length==0; }).removeClass("x-node-unchecked").addClass("x-node-check-all"); else container.find("img.x-node-unchecked").removeClass("x-node-unchecked").addClass("x-node-check-all"); } this.uncheckAll = function(visible) { if (visible) container.find("li.x-tree-node:visible img.x-node-check-all").filter(function(){ return $(this).is(":visible") && $(this).parents("li.x-tree-node:hidden").length==0; }).removeClass("x-node-check-all").addClass("x-node-unchecked"); else container.find("img.x-node-check-all").removeClass("x-node-check-all").addClass("x-node-unchecked"); } this.getParent = function(node) { if (node == null || typeof(node) == "undefined") return null; return fixNode(node).parents("li:first"); } this.getAncensor = function(node, attr, val) { var p = this.getParent(node) while ( p != null && p.length > 0 ) { if (this.getNodeAttr(p, attr) == val) { return p; } p = this.getParent(p); } return null; } this.getChildren = function(node) { if (node != null) return fixNode(node).children("ul:first").children("li"); else return rootNode.children("li"); } this.getNodes = function(level) { return rootNode.find("li.x-tree-node[level=" + level + "]"); } this.getRoot = function() { return rootNode; } this.removeNode = function(node) { node = fixNode(node); var prev = node.prev(); var next = node.next(); //本层最后一个节点 if (next.length == 0 && prev.length > 0) { var preHandler = prev.children("div:first").children("img:first"); if (preHandler.hasClass("x-tree-elbow-line")) { preHandler.removeClass("x-tree-elbow-line").addClass("x-tree-elbow-end"); } else if (preHandler.hasClass("x-tree-elbow")) { preHandler.removeClass("x-tree-elbow").addClass("x-tree-elbow-end"); } else { if (preHandler.hasClass("x-tree-elbow-minus")) { preHandler.removeClass("x-tree-elbow-minus").addClass("x-tree-elbow-end-minus"); } else if (preHandler.hasClass("x-tree-elbow-plus")) { preHandler.removeClass("x-tree-elbow-plus").addClass("x-tree-elbow-end-plus"); } } prev.find("div > span.x-tree-node-indent").each(function(){ $(this).children("img:eq(" + node.attr("level") + ")") .removeClass("x-tree-elbow-line").addClass("x-tree-icon"); }); } //仅有的一个子节点 if (next.length == 0 && prev.length == 0 && node.attr("level") > 0) { var p = node.parents("li:first"); setToLeaf(p); } if (this.selectedNode == node) this.selectedNode = null; node.get(0).innerHTML = ""; node.remove(); } this.addNode = function(n, p, expandParent) { if (typeof(p) == 'string') { p = $("#" + p); } if (options && typeof(options.beforeInitNode) == "function") { var r = options.beforeInitNode.call(this, n); if (r == false) { return null; } } /*
  • 大板
  • */ var li = document.createElement("LI"); li.className = "x-tree-node"; li.id = options.name + n.id; li.setAttribute("init", n.init == true ? 'y' : 'n');//是否初始化属性 if (n.value) li.setAttribute("val", n.value); //类别 //设置扩展属性 if (n.extendAttr) { for (var key in n.extendAttr) { li.setAttribute(key, n.extendAttr[key]); } } var div = document.createElement("div"); div.className = 'x-tree-node-el'; var indent = $("").addClass('x-tree-node-indent'); var level = 0; if (p != null) { //父节点存在 level = p.attr("level") + 1; var pIndent = p.find("div:first > span.x-tree-node-indent:first"); indent.append(pIndent.children().clone()); //继承父节点的line style //根据情况增加自己的line var imgInd = blankImg(); if(p.next().length == 0) { //console.log("1"); imgInd.className = "x-tree-icon"; } else { //console.log("2"); imgInd.className = "x-tree-elbow-line"; } indent.append(imgInd); div.appendChild(indent.get(0)); } li.setAttribute("level", level); var handlerIcon = blankImg(); div.appendChild(handlerIcon); if (n.checkbox) { var checkImg = blankImg(); if (n.checked) { checkImg.className = "x-tree-node-icon x-node-check-all"; } else { checkImg.className = "x-tree-node-icon x-node-unchecked"; } $(checkImg).click(function() { if ($(this).hasClass("x-node-unchecked")) { $(this).removeClass("x-node-unchecked").addClass("x-node-check-all"); $(li).find("img.x-node-unchecked").removeClass("x-node-unchecked").addClass("x-node-check-all"); } else if ($(this).hasClass("x-node-check-all")) { $(this).removeClass("x-node-check-all").addClass("x-node-unchecked"); $(li).find("img.x-node-check-all").removeClass("x-node-check-all").addClass("x-node-unchecked"); } else if($(this).hasClass("x-node-check-incomplete")){ $(obj).removeClass("x-node-check-incomplete").addClass("x-node-check-all"); $(li).find("img.x-node-unchecked").removeClass("x-node-unchecked").addClass("x-node-check-all"); $(li).find("img.x-node-check-incomplete").removeClass("x-node-check-incomplete").addClass("x-node-check-all"); } }); div.appendChild(checkImg); this.setParentCheckboxStatus(n); } var icon = document.createElement("IMG"); icon.className = "x-tree-node-icon"; if (n.expandedIcon || n.collapsedIcon || n.icon) { div.className += " x-tree-node-cusicon"; icon.src = n.icon; icon.expandedIcon = n.expandedIcon; icon.collapsedIcon = n.collapsedIcon; if (n.expanded && n.expandedIcon) { icon.src = n.expandedIcon; } else if (n.collapsedIcon) { icon.src = n.collapsedIcon; } li.setAttribute("hasIcon", true); } else { icon.src = __BLANK_IMAGE; if (n.leaf) { div.className += " x-tree-node-leaf"; } else { div.className += n.expanded ? " x-tree-node-expanded" : " x-tree-node-collapsed"; } } div.appendChild(icon); var txt = document.createElement("a"); if (n.href) { txt.href = n.href; if (n.target) txt.target = n.target; } txt.className = 'x-tree-node-anchor'; txt.innerHTML = n.text; //txt.appendChild(document.createTextNode(n.text)); div.appendChild(txt); var childUl = document.createElement("UL"); childUl.className = "x-tree-node-ct x-tree-lines"; if (!n.expanded) childUl.style.display = "none"; li.appendChild(div); li.appendChild(childUl); if (p != null) { p.children("ul:last").append(li); } else { rootNode.append(li); } var preLi = $(li).prev(); var preHandler = preLi.children("div").children("img:first"); if (preHandler.hasClass("x-tree-elbow-end")) preHandler.removeClass("x-tree-elbow-end").addClass("x-tree-elbow"); preLi.find("div > span.x-tree-node-indent").each(function(){ $(this).children("img:eq(" + level + ")").removeClass("x-tree-icon").addClass("x-tree-elbow-line"); }); if (n.leaf || ((n.init || n.expanded) && (!n.nodes || n.nodes.length == 0))) { handlerIcon.className = "x-tree-ec-icon x-tree-elbow-end"; } else { if (n.expanded) { handlerIcon.className = "x-tree-ec-icon x-tree-elbow-end-minus"; li.setAttribute("init", 'y'); } else { handlerIcon.className = "x-tree-ec-icon x-tree-elbow-end-plus"; } } if (preHandler.hasClass("x-tree-elbow-end-minus")) { preHandler.removeClass("x-tree-elbow-end-minus").addClass("x-tree-elbow-minus"); } else if (preHandler.hasClass("x-tree-elbow-end-plus")) { preHandler.removeClass("x-tree-elbow-end-plus").addClass("x-tree-elbow-plus"); } if (p != null) { var pDiv = p.children("div:first"); pDiv.removeClass("x-tree-node-leaf");//去掉叶子图标 var pHandler = pDiv.children("img:first"); if (pHandler.hasClass("x-tree-elbow-end")) { pHandler.removeClass("x-tree-elbow-end"); if (pDiv.hasClass("x-tree-node-expanded")) { pHandler.addClass("x-tree-elbow-end-minus"); } else { pHandler.addClass("x-tree-elbow-end-plus"); } } else if (pHandler.hasClass("x-tree-elbow")) { pHandler.removeClass("x-tree-elbow"); if (pDiv.hasClass("x-tree-node-expanded")) { pHandler.addClass("x-tree-elbow-minus"); } else { pHandler.addClass("x-tree-elbow-plus"); } } else if (pHandler.hasClass("x-tree-elbow-line")) { pHandler.removeClass("x-tree-elbow-line"); if (pDiv.hasClass("x-tree-node-expanded")) { pHandler.addClass("x-tree-elbow-minus"); } else { pHandler.addClass("x-tree-elbow-plus"); } } if (!pDiv.hasClass("x-tree-node-expanded")) { if (expandParent) this.expand(p); } p.attr("init", 'y'); } $(handlerIcon).bind("click", this, function(evt) { evt.data.toggle(li); }); if (n.canSelect) { $(txt).bind("click", this, function(evt) { if (evt.data.selectedNode) { evt.data.selectedNode.children("div").children("a").removeClass("x-tree-selected"); } evt.data.selectedNode = $(li); $(this).addClass("x-tree-selected"); if (options && $.isFunction(options.onselect)) { options.onselect.call(evt.data.selectedNode, evt.data); } }); li.setAttribute("canSelect", "true"); } if (n.operators && options && options.contextmenu){ $(txt).bind("contextmenu", this, function(evt) { options.contextmenu.setExtraParams({node:$(li),tree:evt.data}); options.contextmenu.show(evt, n.operators); if (evt.data.selectedNode) { evt.data.selectedNode.children("div").children("a").removeClass("x-tree-selected"); } evt.data.selectedNode = $(li); $(this).addClass("x-tree-selected"); return false; }); } if (!n.leaf) { $(txt).bind('dblclick', [this, li], function(evt){ evt.data[0].toggle(evt.data[1]); }); } if (n.nodes && n.nodes.length > 0){ for (var i = 0; i < n.nodes.length; i++){ this.addNode(n.nodes[i], $(li)); } } return li; } this.setParentCheckboxStatus = function(node){ var p = this.getParent(node); var cnodes = this.getChildren(p); //alert($(node).find("img.x-node-check-all").length); if($(node).find("img.x-node-check-all").length == cnodes.length){ } // //当前同级别或低级别的节点是否都选中了 // var isCheckedComplete = $(".x-node-unchecked", p).length == 0; // //当前同级别或低级别的节点是否都没有选中 // var isCheckedNull = $(".x-node-check-all", p).length == 0; // if (isCheckedComplete) // { // p.prev().find(".l-checkbox") // .removeClass("x-node-unchecked x-node-check-incomplete") // .addClass("x-node-check-all"); // } // else if (isCheckedNull) // { // treeitem.parent().prev().find("> .l-checkbox") // .removeClass("l-checkbox-checked l-checkbox-incomplete") // .addClass("l-checkbox-unchecked"); // } // else // { // treeitem.parent().prev().find("> .l-checkbox") // .removeClass("l-checkbox-unchecked l-checkbox-checked") // .addClass("l-checkbox-incomplete"); // } // if (treeitem.parent().parent("li").length > 0) // po.setParentCheckboxStatus(treeitem.parent().parent("li")); } this.initalize = function(ncol, p, lev, asyn, recursive) { var ncount = ncol.length; for (var ci = 0; ci < ncount; ci ++) { var n = ncol[ci]; if (options && typeof(options.beforeInitNode) == "function") { var r = options.beforeInitNode.call(this, n); if (r == false) { continue; } } var end = ci == ncount - 1; //最后一个节点 var noChild = n.leaf || (n.nodes != null && n.nodes.length == 0); var li = document.createElement("LI"); li.className = "x-tree-node"; li.id = options.name + n.id; li.setAttribute("init", n.init == true || n.nodes != null || n.expanded ? 'y' : 'n'); li.setAttribute("level", lev); if (n.value) li.setAttribute("val", n.value); if (n.extendAttr) { for (var key in n.extendAttr) { li.setAttribute(key, n.extendAttr[key]); } } var div = document.createElement("div"); div.className = 'x-tree-node-el'; var indent = document.createElement("SPAN"); indent.className = 'x-tree-node-indent'; if (p) { var pIndent = p.parentNode.firstChild.firstChild.childNodes; for (var i = 0; i < pIndent.length; i++) {//继承父节点的line style indent.appendChild(pIndent[i].cloneNode(false)); } var imgInd = blankImg(); if(p.parentNode.nextSibling == null) { imgInd.className = "x-tree-icon"; } else { imgInd.className = "x-tree-elbow-line"; } indent.appendChild(imgInd); } div.appendChild(indent); var handlerIcon = blankImg(); if (!end) { handlerIcon.className = n.leaf || noChild ? "x-tree-ec-icon x-tree-elbow" : (n.expanded ? "x-tree-ec-icon x-tree-elbow-minus" : "x-tree-ec-icon x-tree-elbow-plus"); } else { handlerIcon.className = n.leaf || noChild ? "x-tree-ec-icon x-tree-elbow-end" : (n.expanded ? "x-tree-ec-icon x-tree-elbow-end-minus" : "x-tree-ec-icon x-tree-elbow-end-plus"); } div.appendChild(handlerIcon); if (n.checkbox) { var checkImg = blankImg(); if(n.checked == null){ checkImg.className = "x-tree-node-icon x-node-check-incomplete"; } else if (n.checked) { checkImg.className = "x-tree-node-icon x-node-check-all"; } else { checkImg.className = "x-tree-node-icon x-node-unchecked"; } bindEventHandler(checkImg, "click", function(tree, node, evt) { if ($.isFunction(options.oncheckchanging)) { options.oncheckchanging(tree, node); } if ($(this).hasClass("x-node-unchecked")) { $(this).removeClass("x-node-unchecked").addClass("x-node-check-all"); if (!evt.ctrlKey) $(node).find("img.x-node-unchecked").removeClass("x-node-unchecked").addClass("x-node-check-all"); } else if ($(this).hasClass("x-node-check-all")) { $(this).removeClass("x-node-check-all").addClass("x-node-unchecked"); if (!evt.ctrlKey) $(node).find("img.x-node-check-all").removeClass("x-node-check-all").addClass("x-node-unchecked"); } if ($.isFunction(options.oncheckchanged)) { options.oncheckchanged(tree, node); } }, this, li); div.appendChild(checkImg); } var icon = blankImg(); icon.className = "x-tree-node-icon"; if (n.expandedIcon || n.collapsedIcon || n.icon) { div.className += " x-tree-node-cusicon"; icon.src = n.icon; icon.expandedIcon = n.expandedIcon; icon.collapsedIcon = n.collapsedIcon; if (n.expanded && n.expandedIcon) { icon.src = n.expandedIcon; } else if (n.collapsedIcon) { icon.src = n.collapsedIcon; } li.setAttribute("hasIcon", true); } else { icon.src = __BLANK_IMAGE; if (n.leaf) { div.className += " x-tree-node-leaf"; } else { div.className += n.expanded ? " x-tree-node-expanded" : " x-tree-node-collapsed"; } } div.appendChild(icon); var txt = document.createElement("a"); if (n.href) { txt.href = n.href; if (n.target) txt.target = n.target; } txt.className = 'x-tree-node-anchor'; txt.innerHTML = n.text; //txt.appendChild(document.createTextNode(n.text)); if (!noChild) { bindEventHandler(handlerIcon, "click", function(tree, node) {tree.toggle(node)}, this, li); bindEventHandler(txt, "dblclick", function(tree, node){tree.toggle(node)}, this, li); } if (n.canSelect) { bindEventHandler(txt, "click", function(tree, node) { if (tree.selectedNode) { tree.selectedNode.children("div").children("a").removeClass("x-tree-selected"); } tree.selectedNode = $(node); $(this).addClass("x-tree-selected"); if (options && $.isFunction(options.onselect)) { options.onselect.call(tree.selectedNode, tree); } }, this, li); li.setAttribute("canSelect", "true"); } if (n.operators && options && options.contextmenu) { bindEventHandler(txt, "contextmenu", function(tree, node, operators, evt) { options.contextmenu.setExtraParams({node:$(li),tree:tree}); options.contextmenu.show(evt, operators); if (tree.selectedNode) { tree.selectedNode.children("div").children("a").removeClass("x-tree-selected"); } tree.selectedNode = $(node); $(this).addClass("x-tree-selected"); return false; }, this, li, n.operators); } div.appendChild(txt); var childUl = document.createElement("UL"); childUl.className = "x-tree-node-ct x-tree-lines"; if (!n.expanded) childUl.style.display = "none"; li.appendChild(div); li.appendChild(childUl); if (n.nodes != null && n.nodes.length > 0) { this.initalize(n.nodes, childUl, parseInt(lev) + 1); } if (p != null) { p.appendChild(li); } else { rootNode.get(0).appendChild(li); } if (li.getAttribute("init") == 'n' && recursive) { this.asynInitChildNodes(li, null, false, asyn, recursive); } } } }