⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jscript.js.bak

📁 javascript脚本实现的树型控件,改善了大数据量时创建树的效率问题
💻 BAK
📖 第 1 页 / 共 3 页
字号:
          if(p[i].id==e.id) {e = p[i+1]; break;}
        }
      }
    }
  }
};

//折叠树的所有节点
MzTreeView.prototype.collapseAll = function()
{
  if(this.node["0"].childNodes.length==0) return;
  var e = this.node["0"].childNodes[0];
  var isdo = t = false;
  while(e.id != "0")
  {
    var p = this.node[e.parentId].childNodes, pn = p.length;
    if(p[pn-1].id==e.id && (isdo || !e.hasChild)){e=this.node[e.parentId]; isdo = true;}
    else
    {
      if(e.hasChild && !isdo)
      {
        this.collapse(e.id), t = false;
        for(var i=0; i<e.childNodes.length; i++)
        {
          if(e.childNodes[i].hasChild){e = e.childNodes[i]; t = true; break;}
        }
        if(!t) isdo = true;
      }
      else
      {
        isdo = false;
        for(var i=0; i<pn; i++)
        {
          if(p[i].id==e.id) {e = p[i+1]; break;}
        }
      }
    }
  }
};

//判断当前节点是否展开着
MzTreeView.prototype.isNodeExpand = function(node)
{
    if (!node.hasChild) return true;
    var childNodesSpan = this.getChildNodeSpan(node);
    if (childNodesSpan){
      return childNodesSpan.style.display == "block";
    }
    return false;
}

//获取当前节点在其父节点中的位置索引
MzTreeView.prototype.indexOf = function(parentNode, node)
{
    if(parentNode.childNodes == null) return -1;
    for(var i = 0; i < parentNode.childNodes.length; i++)
    {
        if(parentNode.childNodes[i].id == node.id)
        {
            return i;
        }
    }
    return -1;
}

//判断当前节点是否是根结点中的最后一个节点
MzTreeView.prototype.isLastNode = function(node)
{
    if(node.parentNode.childNodes == null) return false;
    var index = this.indexOf(node.parentNode,node);
    if(index == -1) return false;
    return index == node.parentNode.childNodes.length - 1;
}

//获取当前节点子节点的个数,不管当前节点是否已经展开
MzTreeView.prototype.getChildNodeCount = function(parentNode)
{
  var d = this.divider, _d = this._d;
  var sid = parentNode.sourceIndex.substr(parentNode.sourceIndex.indexOf(d) + d.length);  
  var reg = new RegExp("(^|"+_d+")"+ sid +d+"[^"+_d+d +"]+("+_d+"|$)", "g");
  var cns = this.names.match(reg); 
  if (cns){
    return cns.length;
  }
  return 0;
};

//该函数用于更新某个节点的图标以及展开或折叠的图标
MzTreeView.prototype.updateNodeIconAndExpand = function(node, HCN, AtEnd)
{
  if(node == null) return;
  if(node.parentId == "0") return;
  node.icon = HCN ? "folder" : "file";
  node.iconExpand  = HCN ? AtEnd ? "PM2" : "PM1" : AtEnd ? "L2" : "L1";
          
  var icon  = this.icons[node.icon];
  var iconE = this.iconsExpand[node.icon];
  var img   = this.getElementById(this.name +"_icon_"+ node.id);
  if (img)  img.src = typeof(iconE)=="undefined" ? icon.src : iconE.src;
   
  var exp   = this.icons[node.iconExpand];
  var expE  = this.iconsExpand[node.iconExpand];
  var expand= this.getElementById(this.name +"_expand_"+ node.id);
  if (expand)
  {
    expand.src = typeof(expE) =="undefined" ? exp.src  : expE.src;
  }
   
};

//该函数用于更新某个父节点下的所有子节点的childAppend,该函数在添加删除节点时被调用
MzTreeView.prototype.updateChildNodesChildAppend = function(parentNode, childAppendIndex, childAppend, icon)
{
    if(parentNode == null) return;
    if(childAppendIndex < 0) return;
    if(typeof(parentNode.childNodes) == "undefined") return;
    for(var i = 0; i < parentNode.childNodes.length; i++)
    {
        var str = parentNode.childNodes[i].childAppend;
        parentNode.childNodes[i].childAppend = str.substring(0,childAppendIndex) + childAppend + str.substring(childAppendIndex+1);
        var childAppendSpan = this.getChildAppendSpan(parentNode.childNodes[i]);
        var img = childAppendSpan.childNodes[childAppendIndex];
        img.src=this.icons[icon].src;
        this.updateChildNodesChildAppend(parentNode.childNodes[i],childAppendIndex,childAppend,icon);
    }
}

//新增一个叶子节点,注:添加该叶子节点时必须确保其父节点是展开的
MzTreeView.prototype.addNode = function(parentNode, newNodeValue)
{
  if(parentNode == null) return;
  if(parentNode.hasChild && !this.isNodeExpand(parentNode)) return;
  
  var parentNodeId = parentNode.id;
  var newNodeId = this.generateGUID();
  
  this.nodes[parentNodeId + '_' + newNodeId] = newNodeValue;
  this.dataFormat();
  this.nodeInit(newNodeId,parentNodeId);
  
  var childNode = this.node[newNodeId];
  var parentNode = this.node[parentNodeId];
  var newChildNodeHtml = this.nodeToHTML(childNode,true);

  if(typeof(parentNode.childNodes) == "undefined" || parentNode.childNodes.length == 0)
  {
    parentNode.childNodes = [];
    parentNode.hasChild = true;
    parentNode.isLoad = true;
  }
  
  if(parentNode.childNodes.length > 0)
  {
    var previousNode = parentNode.childNodes[parentNode.childNodes.length-1];
    this.updateNodeIconAndExpand(previousNode,previousNode.hasChild,false);
    previousNode.childAppend = previousNode.childAppend.substring(0,previousNode.childAppend.length-1) + "│";
    if(previousNode.childNodes)
    {
      if(parentNode.parentId != "0")
        this.updateChildNodesChildAppend(previousNode,this.getChildAppendSpan(parentNode).childNodes.length,"│", "L4");
      else
        this.updateChildNodesChildAppend(previousNode,0,"│", "L4");
    }
  }
  
  this.updateNodeIconAndExpand(parentNode,true,this.isLastNode(parentNode));
  
  parentNode.childNodes[parentNode.childNodes.length] = childNode;
  
  var childNodesHTML = "";
  for(var i = 0; i < parentNode.childNodes.length - 1; i++)
    childNodesHTML += this.getNodeHTML(parentNode.childNodes[i].id);
            
  childNodesHTML += newChildNodeHtml;
  this.getChildNodeSpan(parentNode).innerHTML = childNodesHTML;
  this.getChildNodeSpan(parentNode).style.display = "block";
};

//删除一个叶子节点,注:删除该叶子节点时必须确保其父节点是展开的
//另外,根节点不能删除
MzTreeView.prototype.removeLeafNode = function(node)
{   
  if(node == null) return;
  if(this.getChildNodeCount(node) > 0)
  {
    alert('当前节点有子节点,不能删除!');
    return;
  }
  if(node.parentId == "0")
  {
    alert('根节点不能删除');  
    return;
  }
  if(node.parentNode.hasChild && !this.isNodeExpand(node.parentNode)) return;
  
  var   d   =   this.divider,   _d   =   this._d   
  var   reg   =   new   RegExp("(^|"+   _d   +")([^"+d+"]+"+d+node.id+")",   "g");   
  var   a   =   this.names.match(reg);  

  if(a == null) return;

  this.names   =   this.names.replace(a[0],"");   
  this.nodes[node.parentId + "_" + node.id] = null;    
  
  if(node.parentNode.isLoad)
  {
    var str = "";
    var childNodes = [];
    var j = 0;
    for(var i = 0; i < node.parentNode.childNodes.length; i++)
    {
        if(node.parentNode.childNodes[i].id != node.id)
        {
            str += this.getNodeHTML(node.parentNode.childNodes[i].id);
            childNodes[j] = node.parentNode.childNodes[i];
            j++;
        }
    }
    node.parentNode.childNodes = childNodes;
    this.getChildNodeSpan(node.parentNode).innerHTML = str;
    if(node.parentNode.childNodes.length == 0)
    {
      this.updateNodeIconAndExpand(node.parentNode,false,this.isLastNode(node.parentNode));
      node.parentNode.hasChild = false;
      this.getChildNodeSpan(node.parentNode).style.display = "none";
    }
    else
    {
      var previousNode = node.parentNode.childNodes[node.parentNode.childNodes.length-1];
      if(this.isNodeExpand(previousNode))
        this.updateNodeIconAndExpand(previousNode,previousNode.hasChild,true);  
      else
      {
        previousNode.iconExpand  = "PM2";
        var exp   = this.icons[previousNode.iconExpand];
        var expand= this.getElementById(this.name +"_expand_"+ previousNode.id);
        if (expand)
        {
          expand.src = exp.src;
        }
      }  
      previousNode.childAppend = previousNode.childAppend.substring(0,previousNode.childAppend.length-1) + " "; 
      if(previousNode.childNodes)
      {
        if(node.parentNode.parentId != "0")
          this.updateChildNodesChildAppend(previousNode,this.getChildAppendSpan(node.parentNode).childNodes.length," ", "empty");
        else
          this.updateChildNodesChildAppend(previousNode,0," ", "empty");          
      }
    }
  
  } 
}

//更新一个节点的文本
MzTreeView.prototype.updateNodeText = function(node, newText)
{
  if(node == null) return;
  if(node.parentNode == null) return;

  this.nodes[node.parentNode.id + '_' + node.id] = this.nodes[node.parentNode.id + '_' + node.id].replace(node.text,newText);
  this.dataFormat();
  node.text = newText;
  this.getElementById(this.name +"_link_"+ node.id).innerHTML = node.text;
};

//本树将要用动的图片的字义及预载函数
//path 图片存放的路径名
MzTreeView.prototype.setIconPath  = function(path)
{
  for(var i in this.icons)
  {
    var tmp = this.icons[i];
    this.icons[i] = new Image();
    this.icons[i].src = path + tmp;
  }
  for(var i in this.iconsExpand)
  {
    var tmp = this.iconsExpand[i];
    this.iconsExpand[i]=new Image();
    this.iconsExpand[i].src = path + tmp;
  }
};

//设置树的默认链接
//url 默认链接  若不设置, 其初始值为 #
MzTreeView.prototype.setURL     = function(url){this.url = url;};

//设置树的默认的目标框架名 target
//target 目标框架名  若不设置, 其初始值为 _self
MzTreeView.prototype.setTarget  = function(target){this.target = target;};
MzTreeView.prototype.setIconFileSrc  = function(imgpath)
{
    this.icons["file"] = new Image();
    this.icons["file"].src = imgpath ;
};
MzTreeView.prototype.setIconFolderSrc  = function(imgpath)
{
    this.icons["folder"] = new Image();
    this.icons["folder"].src = imgpath ;
};
MzTreeView.prototype.setIconExpandFolderSrc  = function(imgpath)
{
    // i - 4 节点文件夹图片在展开时的对应文件夹图片
    this.iconsExpand["folder"]=new Image();
    this.iconsExpand["folder"].src = imgpath;
};

// -->

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -