【原创】使用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>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值