`

我的新tree

 
阅读更多


function Node(id, pid, text, href, icon) {
 this.id = id;
 this.pid = pid || null;
 this.text = text || null;
 this.href = href || null;
 this.icon = icon || null;
 this.leaf = true;
 this.level = 0;
 this.parent = null;
 this.tabletree = null;
 this.childNodes = [];
 var chk = document.createElement("input");
 chk.type = "checkbox";
 chk.value = this.id;
 chk.onclick = function () {
  if (this.checked) {
   this.node.checked();
  } else {
   this.node.unchecked();
  }
 };
 this.chk = chk;
 this.chk.node = this;
 var getElByClass = function (cls, tag) {
  var els = [];
  var all = document.getElementsByTagName(tag || "*");
  for (var i = 0; i < all.length; i++) {
   if (all[i].className == cls) {
    els[els.length] = all[i];
   }
  }
  return els;
 };
 var txt = document.createElement("span");
 txt.innerHTML = this.text;
 txt.className = "nodetxt";
 /**txt.onmouseover = function () {
        var els = getElByClass("nodetxt", "span");
        for (var k in els) {
            els[k].className = "nodetxt";
        }
        this.className = "hover";
    };**/
 txt.onclick = function () {
  var els = getElByClass("clicked", "span");
  for (var k in els) {
   els[k].className = "nodetxt";
  }
  this.className = "clicked";
  this.node.tabletree.selectedNode = this.node;
 };
 this.txt = txt;
 this.txt.node = this;
 var sw = document.createElement("img");
 sw.setAttribute("src", "../../images/minus-nl.gif");
 sw.setAttribute("width", "16");
 sw.setAttribute("height", "18");
 sw.setAttribute("align", "bottom");
 sw.onclick = function () {
  var src = this.getAttribute("src");
  if (src == "../../images/plus-nl.gif") {
   this.setAttribute("src", "../../images/minus-nl.gif");
   this.node.expand();
  } else {
   this.setAttribute("src", "../../images/plus-nl.gif");
   this.node.collapse();
  }
 };
 this.sw = sw;
 this.sw.node = this;
 var nodeui = document.createElement("div");
 this.nodeui = nodeui;
}
Node.prototype.expand = function () {
 var child = this.childNodes;
 for (var k in child) {
  child[k].nodeui.style.display = "block";
 }
};
Node.prototype.collapse = function () {
 var child = this.childNodes;
 for (var k in child) {
  child[k].nodeui.style.display = "none";
  child[k].sw.setAttribute("src", "../../images/plus-nl.gif");
  child[k].collapse();
 }
};
Node.prototype.checked = function () {
 var node = this;
 var level = node.level;
 node.tabletree.checkednodes.push(node);
 for (var k = level; k > 1; k--) {
  if (!node.parent.chk.checked) {
   node.parent.chk.checked = true;
   node.tabletree.checkednodes.push(node.parent);
  }
  node = node.parent;
 }
};
Node.prototype.unchecked = function () {
 var node = this;
 var arr = node.tabletree.checkednodes;
 for (var i in arr) {
  if (arr[i].id == node.id) {
   arr.splice(i, 1);
  }
 }
 for (var k in node.childNodes) {
  if (node.childNodes[k].chk.checked) {
   node.childNodes[k].chk.checked = false;
   for (var i in arr) {
    if (arr[i].id == node.childNodes[k].id) {
     arr.splice(i, 1);
    }
   }
   node.childNodes[k].unchecked();
  }
 }
};
function TableTree() {
 this.root = new Node(0);
 this.nodes = [this.root];
 this.checkednodes = [];
 this.selectedNode = null;
 this.container;
 if (!arguments[0]) {
  alert("\u8bf7\u5728\u521b\u5efa\u6811\u65f6\u6307\u5b9a\u6811\u7684\u5bb9\u5668!");
  return;
 }
 if (typeof (arguments[0]) == "string") {
  this.container = document.getElementById(arguments[0]);
 } else {
  this.container = arguments[0];
 }
 var box = document.createElement("div");
 box.className = "rzytree";
 var header = document.createElement("div");
 header.className = "title";
 var title = document.createElement("span");
 title.innerHTML = "\u6743\u9650";
 this.body = document.createElement("div");
 this.body.style.height = '475px';
 this.body.style.overflowY = 'auto';
 header.appendChild(title);
 box.appendChild(header);
 box.appendChild(this.body);
 this.container.appendChild(box);
}
TableTree.prototype.add = function (id, pid, text, href, icon) {
 var p = this.getNode(pid);
 if (p) {
  var node = new Node(id, pid, text, href, icon);
  node.level = p.level + 1;
  node.parent = p;
  node.tabletree = this;
  p.childNodes.push(node);
  p.leaf = false;
  this.nodes.push(node);
 }
};
TableTree.prototype.getNode = function (id) {
 for (var k in this.nodes) {
  if (this.nodes[k].id == id) {
   return this.nodes[k];
  }
 }
 return null;
};
TableTree.prototype.render = function () {
 var body = this.body;
 function drawNode(node) {
  var child = node.childNodes;
  for (var i in child) {
   var nodeui = child[i].nodeui;
   if (child[i].leaf) {
    nodeui.style.paddingLeft = (child[i].level) * 16 + "px";
   } else {
    nodeui.style.paddingLeft = (child[i].level - 1) * 16 + "px";
    nodeui.appendChild(child[i].sw);
   }
            //nodeui.appendChild(child[i].chk);
   nodeui.appendChild(child[i].txt);
   body.appendChild(nodeui);
   drawNode(node.childNodes[i]);
  }
 }
 drawNode(this.root);
};
var Ajax = function (url, params, callback) {
 var reqError = "\u54cd\u5e94\u5f02\u5e38\uff01\uff01\uff01";
 var sendData = null;
 var createXHR = function () {
  var XHR;
  if (window.XMLHttpRequest) {
   XHR = new XMLHttpRequest();
  } else {
   if (window.ActiveXObject) {
    try {
     XHR = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
     try {
      XHR = new ActiveXObject("Microsoft.XMLHTTP");
     }
     catch (e) {
     }
    }
   }
  }
  return XHR;
 };
 var processParams = function () {
  var ret = "";
  for (var p in params) {
   ret += "&";
   ret += p + "=" + params[p];
  }
  ret = ret.substring(1);
  return ret;
 };
 var method = (url.indexOf("?") == -1) ? "POST" : "GET";
 if (params && typeof (params) == "object") {
  if (typeof (params) == "object") {
   if (method == "GET") {
    url += "&" + processParams();
   } else {
    sendData = processParams();
   }
  }
  if (typeof (params) == "string") {
   if (method == "GET") {
    url += "&" + params;
   } else {
    sendData = params;
   }
  }
 }
 var xhr = createXHR();
 xhr.open(method, url, true);
 if (method == "POST") {
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 }
 xhr.onreadystatechange = function () {
  if (xhr.readyState == 4) {
   if (xhr.status == 200) {
    if (callback) {
     callback(xhr);
    }
   } else {
    window.alert(reqError);
   }
  }
 };
 xhr.send(sendData);
};
TableTree.prototype.load = function (url) {
 var tree = this;
 this.url = url;
 Ajax(url, null, function (xhr) {
  var items = xhr.responseXML.getElementsByTagName("item");
  for (var i = 0; i < items.length; i++) {
   var code = items[i].getElementsByTagName("code")[0].childNodes[0].nodeValue;
   var name = items[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
   var url = "";
   if (items[i].getElementsByTagName("url")[0].childNodes[0]) {
    url = items[i].getElementsByTagName("url")[0].childNodes[0].nodeValue;
   }
   var icon = items[i].getElementsByTagName("icon")[0].childNodes[0].nodeValue;
   var parent = items[i].getElementsByTagName("parent")[0].childNodes[0].nodeValue;
   var type = items[i].getElementsByTagName("type")[0].childNodes[0].nodeValue;
   var dscn = "";
   if (items[i].getElementsByTagName("desn")[0].childNodes[0]) {
    dscn = items[i].getElementsByTagName("desn")[0].childNodes[0].nodeValue;
   }
   tree.add(code, parent, name, url, icon);
  }
  tree.render();
 });
};
TableTree.prototype.reload = function () {
 this.nodes = [this.root];
 this.checkednodes = [];
 this.selectedNode = null;
 this.body.innerHTML = '';
 //this.load(this.url);
};
TableTree.prototype.remove = function (node) {
 function remove(node){
  node.nodeui.innerHTML = '';
  var child = node.childNodes;
  for(var k in child){
   remove(child[k]);
  }
 }
 remove(node);
 var url = '../../power?operate=delete&node=' + node.id;
 if(url){
  Ajax(url, null, function (xhr) {
   
  });
 }
};

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    jsTree中文文档

    **jsTree 中文文档概述** jsTree 是一个流行的JavaScript库,用于在网页上创建交互式的树状视图。它主要用于组织结构化的数据,如文件系统、数据库目录或自定义项目结构。jsTree 支持多种操作,包括点击、拖放、...

    tree(c++ tree容器)

    通常,版本号的更新意味着修复了错误、添加了新功能或提升了性能。 总的来说,"tree(c++ tree容器)"是一个旨在简化C++开发中树结构使用的工具,它提供了与STL兼容的接口,并可能包含了多种类型的树结构,适用于需要...

    device-tree-xlnx-master_tree_devicetree2018.3_

    开发者可以通过阅读源码来学习如何为新的FPGA设计创建或修改设备树,以确保Linux内核能够正确地初始化和操作硬件。 此外,开发过程中可能还需要使用到工具如dtc(Device Tree Compiler)进行编译,以及dtc-gen工具...

    jsTree中文api

    $("#treeContainer").jstree("create_node", "#", "新节点", "last"); ``` ### 3. 删除节点 删除节点使用`delete_node`方法,传入要删除的节点ID: ```javascript $("#treeContainer").jstree("delete_node", $(...

    i-Tree最新版2019年中文操作手册

    i-Tree的五大核心产品包括:i-Tree Eco、i-Tree Streets、i-Tree Hydro、i-Tree Vue和i-Tree Species Selector。 1. i-Tree Eco:它能提供整个城市森林的概况分析,通过使用来自社区随机分布样区的现场数据和当地每...

    speedtree帮助教程

    2. 叶片与果实:软件提供了丰富的叶片和果实模型库,可以自由选择或创建新的叶片形状,调整大小、颜色和排列方式,实现多样化的植被效果。 3. 风力模拟:内置的风力引擎可以根据用户设定的风速和方向,让树木动态地...

    EXT tree 使用 实例 最新

    EXT Tree 是一个强大的JavaScript组件,它是EXT JS框架的一部分,用于构建可交互的树形数据结构。EXT Tree在网页中常用于展示层次结构的数据,如文件系统、组织结构或导航菜单等。EXT Tree提供了丰富的功能,包括...

    el-tree-selected-tree

    为了在独立的树中显示这些选中节点,我们需要创建一个新的`el-tree`实例,其`data`属性指向`selectedNodes`。此时,我们需要确保新树的`props`与主树保持一致,以便正确显示节点。同时,为新树添加一个`'node-click'...

    jstree 1.0 最新版

    在`jstree 1.0`的更新中,可能包含了对性能的优化、错误修复以及新功能的添加。例如,`jstree_pre1.0_fix_1`可能是一个在正式发布1.0之前的小版本更新,主要目的是修复了一些预1.0版本中发现的问题,确保正式版的...

    英文语料库词汇标注软件TreeTagger

    在标注阶段,它会应用这些学习到的关系来预测新文本中的词性。 TreeTagger的核心特性包括: 1. **高效性**:TreeTagger的执行速度快,可以处理大量文本数据,这对于大规模的文本分析项目非常有利。 2. **多语言支持...

    B-Tree B-Tree

    1. 插入操作:当向B-Tree插入新的键时,如果目标节点已满,就需要分裂节点。这个过程会将节点的键和子节点平均分配到两个新节点中,同时创建一个新的父节点来包含这两个新节点的键。如果根节点满了,就创建一个新根...

    Ajax tree,动态生成Tree

    **Ajax Tree技术详解** 在网页开发中,树形结构(Tree)是一种常见的数据展示方式,尤其在管理和组织层级数据时非常实用。Ajax Tree是利用Ajax技术动态加载和更新树节点,提供用户友好的交互体验。它允许用户在不...

    extjs tree 节点 链接 新窗口

    在处理Tree节点时,特别是涉及到链接和新窗口打开的情况,有一些特定的技术要点需要注意。 首先,标题“extjs tree 节点 链接 新窗口”指的是在ExtJS的树形组件中,如何为节点设置链接并在点击时在新窗口中打开。...

    e3tree参考手册

    每次E3.Tree更新可能会引入新的功能,例如: - **异步加载**:可能增加了对大数据量节点的异步加载支持,提高页面响应速度。 - **可扩展性**:可能增加了自定义节点渲染和事件处理的能力。 - **交互性**:可能增强了...

    jstree中文文档.doc

    3. **$.jstree.defaults**:这是一个对象,包含创建新jstree实例时的默认配置选项。你可以根据项目需求覆盖这些默认值。 4. **$.jstree.defaults.plugins**:默认情况下,这个数组是空的。你需要指定一组插件的名称...

    selectTree tree控件 日历控件 tree控件 radio CheckBox demo

    "selectTree tree控件 日历控件 tree控件 radio CheckBox demo"这个标题揭示了几个关键的组件,它们是网页交互中的重要元素。下面将详细介绍这些控件及其应用场景。 1. **selectTree(选择树控件)**: 选择树控件...

    jQuery的Tree控件 jstree

    **jQuery的Tree控件 jstree详解** 在Web开发中,常常需要展示层次结构的数据,例如文件系统、组织架构或导航菜单,这时就需要用到Tree控件。jQuery的jstree插件是一款强大的、可定制化的树形视图库,它能够轻松地将...

    treeplan.xla

    Treeplan决策树 excel插件。Treeplan是一种构建决策树的很轻巧的excel插件,可以做出比较规范的决策树,并可以自动计算结果。资源在Excel2016上验证可用。

    sources tree for mac

    **Sources Tree for Mac:一款强大的Git和Mercurial版本控制系统客户端** Sources Tree是一款专为开发者设计的免费图形化界面工具,主要用于管理和操作分布式版本控制系统Git和Mercurial。这款软件由Atlassian公司...

    kdtree.rar_K._k-dimension_kdtree_kdtree的缺点_thisobi

    KNN算法是一种监督学习方法,用于分类和回归任务,其核心思想是将新样本分类为其最近的K个邻居的多数类别。然而,在高维空间中,KNN的性能会显著下降,这是因为“维度灾难”(Curse of Dimensionality),即随着维度...

Global site tag (gtag.js) - Google Analytics