【原創】使用yahoo雅虎js庫(YUI)建立無刷新的N級樹(可添加刪除節點)

1、首先你要去下面地址下載yahoo類庫     http://developer.yahoo.com/yui/     2。5版本的 8。84M,你可以不全用,只用樹的 2、然後需要把yui/build/treeview/文件夾下面的文件複製到你的工程 3、需要引用下面的js 所有的js代碼

 <link rel="stylesheet" type="text/css" href="/yui/build/treeview/assets/skins/sam/treeview.css" />     <link rel="stylesheet" type="text/css" href="/yui/build/menu/assets/skins/sam/menu.css">     <script type="text/javascript" src="/yui/build/yahoo/yahoo.js"></script>     <script type="text/javascript" src="/yui/build/event/event.js"></script>     <script type="text/javascript" src="/yui/build/treeview/treeview.js"></script>         <!-- Dependency source files -->     <script type="text/javascript" src="/yui/build/yahoo-dom-event/yahoo-dom-event.js"></script>     <script type="text/javascript" src="/yui/build/container/container_core.js"></script>     <!-- Menu source file -->     <script type="text/javascript" src="/yui/build/menu/menu.js"></script>

頁面html代碼

  <div class="yui-skin-sam">                                         <div id="treeDiv1">                                         </div>                                     </div>

 

 <script type="text/javascript">    var channelId=0;    var treeId=0;    function LoadChannelTree(obj)    {       channelId=obj.value;       if (channelId!=0)       {           var ds_Normal=AjaxForTree.GetTree(channelId).value;                      if(ds_Normal != null && typeof(ds_Normal) == "object" && ds_Normal.Tables.length != 0 && ds_Normal.Tables[0].Rows.length != 0)           {              treeId=ds_Normal.Tables[0].Rows[0].TreeId;              treeInit();              //alert(treeId);           }           else           {             treeId=0;             document.getElementById("treeDiv1").innerHTML="<a href='#' style='text-decoration:underline;' οnclick='initChannelTree();'>該頻道下還沒有TAG樹,請點擊這裏創建TAG樹。</a>";           }         document.getElementById("releaseTreeSpan").style.display="block";              }      else      {         document.getElementById("releaseTreeSpan").style.display="none";         document.getElementById("treeDiv1").innerText="";      }      document.getElementById("releaseTree").href="/Tag/TagTreePosition.aspx?TreeId="+treeId+"&placeValuesBeforeTB_=savedValues&TB_iframe=true&height=500&width=770";    }        function LoadNodeContent(nodeId)    {          var param="NodeId=" + nodeId;          ShowContentA("/controls/Tag/TagListForTree.ashx",param,document.getElementById("NodeContent"),null);    }     function initChannelTree()     {          var res=AjaxForTree.CreateTree(channelId).value;          if(res!=-1)          {             treeId=res;             treeInit();          }          else          {             document.getElementById("treeDiv1").innerHTML="樹創建失敗!";          }     }          //global variable to allow console inspection of tree:     var tree;     var currentTreeNodeId;     var oTextNodeMap = {};       function treeInit() {                 tree = new YAHOO.widget.TreeView("treeDiv1");                         var myobj="{label:'所有',id:'1'}";                myobj=eval('('+myobj+')');             var rootNode = new YAHOO.widget.TextNode(myobj, tree.getRoot(), true);             oTextNodeMap[rootNode.labelElId]=rootNode;                          buildChildNodeTree(rootNode,treeId);            tree.subscribe("expand"function(node) {                            });            tree.subscribe("collapse"function(node) {                         });            // Trees with TextNodes will fire an event for when the label is clicked:            tree.subscribe("labelClick"function(node) {                  var nodeId=node.data.id;                   document.getElementById('TagBtnList').style.display='';                   document.getElementById('addTags').href='/Tag/SelectTreeTag.aspx?TreeNodeId='+nodeId+'&placeValuesBeforeTB_=savedValues&TB_iframe=true&height=500&width=770';                   //document.getElementById('addTags').href='/PositionMore.aspx?placeValuesBeforeTB_=savedValues&TB_iframe=true&height=500&width=770';                  LoadNodeContent(nodeId);                  currentTreeNodeId=nodeId;                });         //alert(tree.getRoot());         //The tree is not created in the DOM until this method is called:         tree.draw();        }          function buildChildNodeTree( node )     {         var nodeId=node.data.id;          //alert(nodeId);         var ds_Normal=AjaxForTree.GetChildNode(nodeId,treeId).value;         if(ds_Normal != null && typeof(ds_Normal) == "object" && ds_Normal.Tables != null)         {                  for(var i=0;i<ds_Normal.Tables[0].Rows.length;i++)           {              var TreeNodeId=ds_Normal.Tables[0].Rows[i].TreeNodeId;              var TreeNodeName=ds_Normal.Tables[0].Rows[i].TreeNodeName;              var myobj="{label:'" + TreeNodeName + "',id:'" + TreeNodeId + "'}";                  myobj=eval('('+myobj+')');              var tmpNode = new YAHOO.widget.TextNode(myobj, node, true);              oTextNodeMap[tmpNode.labelElId]=tmpNode;              ds_child=AjaxForTree.GetChildNode(TreeNodeId,treeId).value;              if(ds_child != null && ds_child.Tables != null && ds_child.Tables[0].Rows.length!=0)              {                 //alert(ds_child.Tables[0].Rows.length);                 tmpNode.setDynamicLoad(loadDataForNode);              }             }                    }                                     }     //Add an onDOMReady handler to build the tree when the document is ready     //YAHOO.util.Event.onDOMReady(treeInit);     function loadDataForNode(node, onCompleteCallback) {         buildChildNodeTree(node,treeId);      onCompleteCallback();        }             /*      The YAHOO.widget.TextNode instance whose "contextmenu"       DOM event triggered the display of the       ContextMenu instance. */ var oCurrentTextNode = null; /*      Adds a new TextNode as a child of the TextNode instance       that was the target of the "contextmenu" event that       triggered the display of the ContextMenu instance. */ function addNode() {       var sLabel = window.prompt("請爲新建立的節點輸入名稱: """);     var rtn=CheckIsValid(sLabel);     if (!rtn)     {       alert('您輸入的內容中含有非法字符,這裏只允許輸入字母或數字!');       return;     }     if (sLabel && sLabel.length > 0) {                      var nodeId=oCurrentTextNode.data.id;        var res=AjaxForTree.AddTreeNode(nodeId,sLabel,treeId).value;        //alert(res);        treeInit();             } } /*      Edits the label of the TextNode that was the target of the      "contextmenu" event that triggered the display of the       ContextMenu instance. */ function editNodeLabel() {     if (oCurrentTextNode.data.id==1)     {         alert('根節點不能編輯!');         return;     }         var sLabel = window.prompt("請爲當前的節點輸入新的名稱: ", oCurrentTextNode.getLabelEl().innerHTML);     var rtn=CheckIsValid(sLabel);     if (!rtn)     {       alert('您輸入的內容中含有非法字符,這裏只允許輸入字母或數字!');       return;     }     if (sLabel && sLabel.length > 0) {                  var nodeId=oCurrentTextNode.data.id;         var res=AjaxForTree.EditTreeNode(nodeId,sLabel).value;         treeInit();     } } /*     Deletes the TextNode that was the target of the "contextmenu"     event that triggered the display of the ContextMenu instance. */ function deleteNode() {         var isTrue=window.confirm("您確認刪除這個節點嗎?");         if (isTrue)         {             if (oCurrentTextNode.data.id==1)             {                 alert('根節點不能刪除!');                 return;             }             var nodeId=oCurrentTextNode.data.id;             var res=AjaxForTree.DelTreeNode(nodeId).value;             treeInit();         }          } /*     "contextmenu" event handler for the element(s) that      triggered the display of the ContextMenu instance - used     to set a reference to the TextNode instance that triggered     the display of the ContextMenu instance. */ function onTriggerContextMenu(p_oEvent) {          function getTextNodeFromEventTarget(p_oTarget) {         if (p_oTarget.tagName.toUpperCase() == "A" &&                  p_oTarget.className == "ygtvlabel") {             return oTextNodeMap[p_oTarget.id];         }         else {             if (p_oTarget.parentNode &&                      p_oTarget.parentNode.nodeType == 1) {                 return getTextNodeFromEventTarget(p_oTarget.parentNode);                          }                  }          }            var oTextNode = getTextNodeFromEventTarget(this.contextEventTarget);             if (oTextNode) {         oCurrentTextNode = oTextNode;     }     else {              // Cancel the display of the ContextMenu instance.              this.cancel();              } }     var oContextMenu = new YAHOO.widget.ContextMenu("mytreecontextmenu", {                                                     trigger: "treeDiv1",                                                     lazyload: true,                                                      itemdata: [                                                         { text: "增加子節點", onclick: { fn: addNode } },                                                         { text: "編輯當前節點", onclick: { fn: editNodeLabel } },                                                         { text: "刪除當前節點", onclick: { fn: deleteNode } }                                                     ] });           oContextMenu.subscribe("triggerContextMenu", onTriggerContextMenu);         </script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章