1、首先你要去下面地址下载yahoo类库
    http://developer.yahoo.com/yui/
    2。5版本的 8。84M,你可以不全用,只用树的
2、然后需要把yui/build/treeview/文件夹下面的文件复制到你的工程

3、需要引用下面的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代码

<divclass="yui-skin-sam"><divid="treeDiv1"></div></div>

所有的js代码

<script type="text/javascript">varchannelId=0;vartreeId=0;functionLoadChannelTree(obj)
   {
      channelId
=obj.value;if(channelId!=0)
      {
vards_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";
   }
functionLoadNodeContent(nodeId)
   {
varparam="NodeId="+nodeId;
         ShowContentA(
"/controls/Tag/TagListForTree.ashx",param,document.getElementById("NodeContent"),null);
   }
functioninitChannelTree()
    {
varres=AjaxForTree.CreateTree(channelId).value;if(res!=-1)
         {
            treeId
=res;
            treeInit();
         }
else{
            document.getElementById(
"treeDiv1").innerHTML="树创建失败!";
         }
    }
//global variable to allow console inspection of tree:vartree;varcurrentTreeNodeId;varoTextNodeMap={};functiontreeInit() {
    
           tree
=newYAHOO.widget.TreeView("treeDiv1");varmyobj="{label:'所有',id:'1'}";
               myobj
=eval('('+myobj+')');varrootNode=newYAHOO.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) {varnodeId=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();

}functionbuildChildNodeTree( node )
    {
varnodeId=node.data.id;//alert(nodeId);vards_Normal=AjaxForTree.GetChildNode(nodeId,treeId).value;if(ds_Normal!=null&&typeof(ds_Normal)=="object"&&ds_Normal.Tables!=null)
        {
for(vari=0;i<ds_Normal.Tables[0].Rows.length;i++)
          {
varTreeNodeId=ds_Normal.Tables[0].Rows[i].TreeNodeId;varTreeNodeName=ds_Normal.Tables[0].Rows[i].TreeNodeName;varmyobj="{label:'"+TreeNodeName+"',id:'"+TreeNodeId+"'}";
                 myobj
=eval('('+myobj+')');vartmpNode=newYAHOO.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);functionloadDataForNode(node, onCompleteCallback) {

buildChildNodeTree(node,treeId);
     onCompleteCallback();   
    }/*The YAHOO.widget.TextNode instance whose "contextmenu" 
     DOM event triggered the display of the 
     ContextMenu instance.
*/varoCurrentTextNode=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.
*/functionaddNode() {varsLabel=window.prompt("请为新建立的节点输入名称:","");varrtn=CheckIsValid(sLabel);if(!rtn)
    {
      alert(
'您输入的内容中含有非法字符,这里只允许输入字母或数字!');return;
    }
if(sLabel&&sLabel.length>0) {varnodeId=oCurrentTextNode.data.id;varres=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.
*/functioneditNodeLabel() {if(oCurrentTextNode.data.id==1)
    {
        alert(
'根节点不能编辑!');return;
    }
varsLabel=window.prompt("请为当前的节点输入新的名称:", oCurrentTextNode.getLabelEl().innerHTML);varrtn=CheckIsValid(sLabel);if(!rtn)
    {
      alert(
'您输入的内容中含有非法字符,这里只允许输入字母或数字!');return;
    }
if(sLabel&&sLabel.length>0) {varnodeId=oCurrentTextNode.data.id;varres=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.
*/functiondeleteNode() {varisTrue=window.confirm("您确认删除这个节点吗?");if(isTrue)
        {
if(oCurrentTextNode.data.id==1)
            {
                alert(
'根节点不能删除!');return;
            }
varnodeId=oCurrentTextNode.data.id;varres=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.
*/functiononTriggerContextMenu(p_oEvent) {functiongetTextNodeFromEventTarget(p_oTarget) {if(p_oTarget.tagName.toUpperCase()=="A"&&p_oTarget.className=="ygtvlabel") {returnoTextNodeMap[p_oTarget.id];

}else{if(p_oTarget.parentNode&&p_oTarget.parentNode.nodeType==1) {returngetTextNodeFromEventTarget(p_oTarget.parentNode);
            
            }
        
        }
    
    }
varoTextNode=getTextNodeFromEventTarget(this.contextEventTarget);if(oTextNode) {

oCurrentTextNode=oTextNode;

}else{//Cancel the display of the ContextMenu instance.this.cancel();
        
    }

}varoContextMenu=newYAHOO.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>

【原创】使用yahoo雅虎js库(YUI)建立无刷新的N级树(可添加删除节点)相关推荐

  1. 利用js实现table的无刷新静态内容过滤

     最近,一直在学习前端方面的知识,看到网上有一些页面的table能够实现静态内容筛选,觉得这个东西有点意思,由于初学js就想试试. 我看了一些网上有关的案例http://www.freejs.ne ...

  2. js动态添加删除节点

    转载于:https://www.cnblogs.com/jiaobaobao/p/6762692.html

  3. js向html中指定位置追加文本,JavaScript中如何添加文本节点?

    在javascript中提供了很多操作DOM文档的方法,当然也包括创建一个节点,下面我们来看一下JavaScript如何创建一个创建一个文本节点(text). JavaScript中添加文本节点的方法 ...

  4. Yahoo javascript 开源界面库YUI 和EXT

    清清月儿整理 [yui][译]Yahoo!User Interface Libray 介绍 Yahoo! User Interface Library(简称yui) 是一个使用JavaScript编写 ...

  5. 目前国外流行的几个JS库.

    今天嫌着没事,总结了一下目前国外的一些JS库,.不知道对大家有用不? 因为都是国外的站点,可能访问速度比较慢,耐心点. Ext:http://extjs.com/download jQuery:htt ...

  6. 贡献一个连jquery都觉的大的时候可以用的 js库

    在一些很小的项目里,连用jquery都还觉的大的时候,你就可以用我的这个库了. 一个库或者框架,是应需求而生的,当你的项目实际上只需要简单的一个好用的选择器 一个ajax 封装 一个兼容的事件封装的时 ...

  7. jQuery库与其他JS库冲突的解决办法

    关键字: javascript 现在的js库很多,而且各有所长.像我,就比较喜欢jQuery,但同时也会使用一下其他的js库,如YUI,DWR什么的.但是它们却时不时地相互闹些小矛盾,真是让人头痛.究 ...

  8. 若川知乎高赞:有哪些必看的 JS 库?

    欢迎星标我的公众号,回复加群,长期交流学习 我的知乎回答目前2w+阅读量,270赞,现在发到公众号声明原创. 必看的js库?只有当前阶段值不值看. 我从去年7月起看一些前端库的源码,历时一年才写了八篇 ...

  9. MVVM js 库JsRender/JsViews和knockoutjs介绍

    MVVM概念 MVVM的解释有很多,抛开抽象的描叙我想最实用的一点是把UI和数据绑定,事件做成了一种静态契约,也就是模版,同时UI和数据可以独立动态变化.WPF,SL相对Winfrom和asp.net ...

最新文章

  1. SPringBoot+mybatis 框架搭建例子
  2. 单片机定时器实验两位倒计时秒表_单片机学习「1」 初始51单片机
  3. Mysql的几个字符串函数【concat、concat_ws、group_concat】
  4. spark1.3.1使用基础教程
  5. VS2008,GDIPlus初步
  6. java安全——类加载器+字节码校验+安全管理器与访问权限
  7. STM32:GPIO的8种输入输出模式深入详解
  8. jenkins 构建异常_Jenkins多环境持续集成架构实践!
  9. word文档太大怎么压缩到最小?
  10. 数学与计算机学院女生节标语,3.7女生节标语横幅大比拼:信息管理学院:信
  11. xp系统支持的python版本_xp系统安装不上python
  12. 封装继承多态还是封装抽象继承多态
  13. 驰骋计算产业数十年的Wintel联盟开始分崩离析
  14. 推荐算法架构3:精排
  15. 关于计算机学院 公众号的名字,最新微信公众号名字大全
  16. vue3监听网页窗口关闭
  17. Django-(6)
  18. 肽基脯氨酰异构酶底物:1926163-51-0,WFY-pSer-PR-AMC
  19. 敏捷个人2012.3月份线下活动报道:活出我的价值
  20. 丰和的折价率可能超过50%

热门文章

  1. EduSoho网络课堂通用版
  2. MooTools教程(3):数组管理DOM元素
  3. 深入了解ASP.NET运行内幕
  4. 对 app_offline.htm 的几点错误认识
  5. Web浏览器调试工具firebug
  6. IE 浏览器各个版本 JavaScript 支持情况一览表
  7. redis cluster管理工具redis-trib.rb详解
  8. mysql忘记密码恢复
  9. C/C++——new一个二维数组
  10. 【今日CV 计算机视觉论文速览】 11 Mar 2019