- 浏览: 264231 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (119)
- spring (1)
- hibernate (1)
- struts (0)
- ibatis (0)
- memcache (4)
- mysql (1)
- ant (0)
- junit (0)
- protobuf (1)
- android (1)
- java (15)
- language (1)
- google (1)
- scala (0)
- ruby (0)
- python (0)
- 设计模式 (1)
- think in java (6)
- 服务器 (4)
- javascript (24)
- css (2)
- mongodb (1)
- eclipse (1)
- 并发 (1)
- test (1)
- jquery (3)
- vim (2)
- javaio (1)
- log4j (0)
- jdk (0)
- api (0)
- hadoop (1)
- HashMap (1)
- 数据库 (1)
- webservice (1)
- jvm (0)
- linux (4)
最新评论
-
weilingfeng98:
定制SSLContext
java安全SSL -
weixuanfeng:
楼主有没有用eclipse,Java调用Ant脚本的代码啊。 ...
ant调用步骤
<html>
<head>
</head>
<body>
<div id="treeArea"></div>
<script language="javascript">
function Node(parentId, id, openStatus, text, url, color){
this.parentId = parentId; // 父节点的id
this.id = id; // 自身id
this.href = url;
this.color = color;
this.openStatus = openStatus; // 当前的打开状态
this.haveChild = false; // 为了便于显示,增加了该属性,判断该节点是否有子节点,默认为没有
this.text = text; // 显示的文本信息
}
// 定义一个数组用来保存所有的节点(Node)包括根节点(RootNode), 也可以用其他的方式来保存
var arrTree = new Array();
//为了在使得创建节点更方便点,定义了下面的函数:
function createNode(parentId, id, openStatus, text, url, color){
// 这里检验一下输入的parentId是否存在,不存在则提示错误
// checkParent(parentId);
// 检验输入的id是否已经存在,如果存在做相应的处理, 这里我就不写了
// checkId(id);
// 设置该parentId有子节点
if( parentId > -1 ){
if(!arrTree[parentId].hasChild)
arrTree[parentId].hasChild = true;
}
var node = new Node(parentId, id, openStatus, text, url, color);
arrTree.push( node);
}
/*-1这里定义为根节点的父节点,不存在这样的节点,所以,判断节点的父节点为-1时,标识当前节点时父节点*/
createNode(-1/*上面的注释*/, 0/*节点id*/, true/*关闭*/, "ExtJs2.02实例教程", '','green');
createNode(0, 1, true, "1.ExtJs简介");
createNode(0, 2, true, "2.网格(Grids)");
createNode(0, 3, true, "3.标签(tabs)");
createNode(0, 4, true, "4.窗体(Windows)");
createNode(0, 5, true, "5.树(Trees)");
createNode(0, 6, true, "6.布局管理器");
createNode(0, 7, true, "7.组合框(ComboBox)");
createNode(0, 8, true, "8.表单(Forms)");
createNode(0, 9, true, "9.工具条和菜单");
createNode(0, 10, true, "10.其他分类");
createNode(1, 11, false, "1.1 ExtJs简介", "http://onlyaa.com/html/project/extjs/200805/21-2146.html", "blue");
createNode(1, 12, false, "1.2 ExtJs入门");
createNode(2, 21, false, "2.1 基本数组网格(Basic Array Grid)");
createNode(2, 22, false, "2.2 XML网格(XML Grid)");
createNode(2, 23, false, "2.3 JSON网格(JSON Grid)");
createNode(2, 24, false, "2.4 可编辑的网格(Editable Grid))");
createNode(2, 25, false, "2.5 分页(Paging)");
createNode(2, 26, false, "2.6 分组(Grouping)");
createNode(2, 27, false, "2.7 实时分组统计(Live Group Summary)");
createNode(2, 28, false, "2.8 定制:网格插件(Customizing: Grid Plugins)");
createNode(3, 31, false, "3.1 基本标签(Basic Tabs)");
createNode(3, 32, false, "3.2 实时标签");
createNode(4, 41, false, "4.1 Hello World");
createNode(4, 42, false, "4.2 对话框(MessageBox)");
createNode(4, 43, false, "4.3 布局窗口(Layout Window)");
createNode(5, 51, false, "5.1 拖放排列(Drag and Drop Reordering)");
createNode(5, 52, false, "5.2 多棵树(Multiple trees)");
createNode(5, 53, false, "5.3 定制:列树(Customizing: Column Tree)");
createNode(6, 61, false, "6.1 区域布局(Border Layout)");
createNode(6, 62, false, "6.2 固定布局(Anchor Layout)");
createNode(6, 63, false, "6.3 定制:门户网站(Customizing: Portals)");
createNode(7, 71, false, "7.1 基本组合框(Basic ComboBox)");
createNode(7, 72, false, "7.2 定制:组合框模板(Customizing: ComboBox Templates)");
createNode(8, 81, false, "8.1 动态表单(Dynamic Forms)");
createNode(8, 82, false, "8.2 AJAX生成的XML表单(Ajax with XML Forms)");
createNode(8, 83, false, "8.3 定制:搜索框(Customizing: Search Field)");
createNode(9, 91, false, "9.1 基本工具条(Basic Toolbar)");
createNode(9, 92, false, "9.2 Ext 动作(Ext Actions)");
createNode(10, 101, false, "10.1 数据视图(DataView)");
createNode(10, 102, false, "10.2 数据视图(Advanced DataView)");
createNode(10, 103, false, "10.3 进度条(Progress Bar)");
createNode(10, 104, false, "10.4 模版(Templates)");
createNode(10, 105, false, "10.5 面板(Panels)");
createNode(10, 106, false, "10.6 调整大小(Resizable)");/*
这里简单的创建了一棵树,但是还没有显示,下面要做的就是怎么显示:
可能方法是有点笨拙,不要见怪
…. 显示树
// 这个思路很容易理解,就是从根节点开始, 在arrTree数组超找该根节点的子节点并显示,
这里用的是递归方式去遍历每棵树, 由于简单的结构很简单的想法,所以没有考虑算法的效率问题
*/
function doRender(){
var r = appendNode(0)
treeArea.appendChild(r);
}
// AppendNode(node), 将该节点的子节点加载到container里面, 就是div对象
function appendNode(id){
node = arrTree[id]
var id = node.id;
var area = document.createElement("div");
var expand = document.createElement("span");
var textNode = document.createElement("span");
var subarea = document.createElement("div");
var str = ''
if( node.href ){
str += '<a href="'+node.href+'" target="_blank" ';
if( node.color )
str += ' style="color:'+node.color+';"';
str += '>'+ node.text + '</a> ';
} else {
if( node.color )
str += '<font color="'+node.color+'">'+ node.text+'</font>';
else
str = node.text;
}
textNode.innerHTML = str;
expand.style.fontFamily = 'Fixedsys';
expand.style.cursor = 'hand';
expand.style.color = 'red';
expand.style.padding = '5px';
expand.innerText = '-';
subarea.style.paddingLeft = '30px';
subarea.style.lineHeight = '2';
if( !node.openStatus ){
subarea.style.display = 'none';
}
area.style.padding = '4px';
area.appendChild(expand);
area.appendChild(textNode);
area.appendChild(subarea);
if(node.hasChild){
expand.innerText = '+';
if( node.openStatus ) {expand.innerText = '-'; }
expand.onclick = function(){
if( subarea.style.display == '' ){
node.openStatus = false;
this.innerHTML = '+';
subarea.style.display = 'none';
} else {
node.openStatus = true;
this.innerHTML = '-';
subarea.style.display = '';
}
}
for(var i=1/*因为根节点在0位置,所以从1开始查找*/; i < arrTree.length; i++ ){
if( arrTree[i].parentId == id ){
var c = appendNode(i);
subarea.appendChild(c);
}
}
}
return area; // 返回div对象,里面包含了子树的信息
}
doRender();
</script>
</body>
</html>
<head>
</head>
<body>
<div id="treeArea"></div>
<script language="javascript">
function Node(parentId, id, openStatus, text, url, color){
this.parentId = parentId; // 父节点的id
this.id = id; // 自身id
this.href = url;
this.color = color;
this.openStatus = openStatus; // 当前的打开状态
this.haveChild = false; // 为了便于显示,增加了该属性,判断该节点是否有子节点,默认为没有
this.text = text; // 显示的文本信息
}
// 定义一个数组用来保存所有的节点(Node)包括根节点(RootNode), 也可以用其他的方式来保存
var arrTree = new Array();
//为了在使得创建节点更方便点,定义了下面的函数:
function createNode(parentId, id, openStatus, text, url, color){
// 这里检验一下输入的parentId是否存在,不存在则提示错误
// checkParent(parentId);
// 检验输入的id是否已经存在,如果存在做相应的处理, 这里我就不写了
// checkId(id);
// 设置该parentId有子节点
if( parentId > -1 ){
if(!arrTree[parentId].hasChild)
arrTree[parentId].hasChild = true;
}
var node = new Node(parentId, id, openStatus, text, url, color);
arrTree.push( node);
}
/*-1这里定义为根节点的父节点,不存在这样的节点,所以,判断节点的父节点为-1时,标识当前节点时父节点*/
createNode(-1/*上面的注释*/, 0/*节点id*/, true/*关闭*/, "ExtJs2.02实例教程", '','green');
createNode(0, 1, true, "1.ExtJs简介");
createNode(0, 2, true, "2.网格(Grids)");
createNode(0, 3, true, "3.标签(tabs)");
createNode(0, 4, true, "4.窗体(Windows)");
createNode(0, 5, true, "5.树(Trees)");
createNode(0, 6, true, "6.布局管理器");
createNode(0, 7, true, "7.组合框(ComboBox)");
createNode(0, 8, true, "8.表单(Forms)");
createNode(0, 9, true, "9.工具条和菜单");
createNode(0, 10, true, "10.其他分类");
createNode(1, 11, false, "1.1 ExtJs简介", "http://onlyaa.com/html/project/extjs/200805/21-2146.html", "blue");
createNode(1, 12, false, "1.2 ExtJs入门");
createNode(2, 21, false, "2.1 基本数组网格(Basic Array Grid)");
createNode(2, 22, false, "2.2 XML网格(XML Grid)");
createNode(2, 23, false, "2.3 JSON网格(JSON Grid)");
createNode(2, 24, false, "2.4 可编辑的网格(Editable Grid))");
createNode(2, 25, false, "2.5 分页(Paging)");
createNode(2, 26, false, "2.6 分组(Grouping)");
createNode(2, 27, false, "2.7 实时分组统计(Live Group Summary)");
createNode(2, 28, false, "2.8 定制:网格插件(Customizing: Grid Plugins)");
createNode(3, 31, false, "3.1 基本标签(Basic Tabs)");
createNode(3, 32, false, "3.2 实时标签");
createNode(4, 41, false, "4.1 Hello World");
createNode(4, 42, false, "4.2 对话框(MessageBox)");
createNode(4, 43, false, "4.3 布局窗口(Layout Window)");
createNode(5, 51, false, "5.1 拖放排列(Drag and Drop Reordering)");
createNode(5, 52, false, "5.2 多棵树(Multiple trees)");
createNode(5, 53, false, "5.3 定制:列树(Customizing: Column Tree)");
createNode(6, 61, false, "6.1 区域布局(Border Layout)");
createNode(6, 62, false, "6.2 固定布局(Anchor Layout)");
createNode(6, 63, false, "6.3 定制:门户网站(Customizing: Portals)");
createNode(7, 71, false, "7.1 基本组合框(Basic ComboBox)");
createNode(7, 72, false, "7.2 定制:组合框模板(Customizing: ComboBox Templates)");
createNode(8, 81, false, "8.1 动态表单(Dynamic Forms)");
createNode(8, 82, false, "8.2 AJAX生成的XML表单(Ajax with XML Forms)");
createNode(8, 83, false, "8.3 定制:搜索框(Customizing: Search Field)");
createNode(9, 91, false, "9.1 基本工具条(Basic Toolbar)");
createNode(9, 92, false, "9.2 Ext 动作(Ext Actions)");
createNode(10, 101, false, "10.1 数据视图(DataView)");
createNode(10, 102, false, "10.2 数据视图(Advanced DataView)");
createNode(10, 103, false, "10.3 进度条(Progress Bar)");
createNode(10, 104, false, "10.4 模版(Templates)");
createNode(10, 105, false, "10.5 面板(Panels)");
createNode(10, 106, false, "10.6 调整大小(Resizable)");/*
这里简单的创建了一棵树,但是还没有显示,下面要做的就是怎么显示:
可能方法是有点笨拙,不要见怪
…. 显示树
// 这个思路很容易理解,就是从根节点开始, 在arrTree数组超找该根节点的子节点并显示,
这里用的是递归方式去遍历每棵树, 由于简单的结构很简单的想法,所以没有考虑算法的效率问题
*/
function doRender(){
var r = appendNode(0)
treeArea.appendChild(r);
}
// AppendNode(node), 将该节点的子节点加载到container里面, 就是div对象
function appendNode(id){
node = arrTree[id]
var id = node.id;
var area = document.createElement("div");
var expand = document.createElement("span");
var textNode = document.createElement("span");
var subarea = document.createElement("div");
var str = ''
if( node.href ){
str += '<a href="'+node.href+'" target="_blank" ';
if( node.color )
str += ' style="color:'+node.color+';"';
str += '>'+ node.text + '</a> ';
} else {
if( node.color )
str += '<font color="'+node.color+'">'+ node.text+'</font>';
else
str = node.text;
}
textNode.innerHTML = str;
expand.style.fontFamily = 'Fixedsys';
expand.style.cursor = 'hand';
expand.style.color = 'red';
expand.style.padding = '5px';
expand.innerText = '-';
subarea.style.paddingLeft = '30px';
subarea.style.lineHeight = '2';
if( !node.openStatus ){
subarea.style.display = 'none';
}
area.style.padding = '4px';
area.appendChild(expand);
area.appendChild(textNode);
area.appendChild(subarea);
if(node.hasChild){
expand.innerText = '+';
if( node.openStatus ) {expand.innerText = '-'; }
expand.onclick = function(){
if( subarea.style.display == '' ){
node.openStatus = false;
this.innerHTML = '+';
subarea.style.display = 'none';
} else {
node.openStatus = true;
this.innerHTML = '-';
subarea.style.display = '';
}
}
for(var i=1/*因为根节点在0位置,所以从1开始查找*/; i < arrTree.length; i++ ){
if( arrTree[i].parentId == id ){
var c = appendNode(i);
subarea.appendChild(c);
}
}
}
return area; // 返回div对象,里面包含了子树的信息
}
doRender();
</script>
</body>
</html>
发表评论
-
javascript正则学习
2014-12-06 10:47 821JavaScript中关于正则表达式的有几个关键函数,sear ... -
jquery制作tab标签的最简方式
2012-12-27 15:33 970用jquery制作tab标签,代码很简单,看代码 -
javascript异步获取script资源的实现方法
2012-12-27 15:12 1212研究jquery异步获取script资源的方式,这里贴出来供大 ... -
javascript异步加载几种方式总结
2012-12-26 19:42 10951评价一个网站性能是否高效,除了后端程序的优化,前端性能也不能忽 ... -
javascript中Array对象几种方法总结
2012-08-30 17:28 933//push将新元素添加到一个数组中,并返回数组的新长度值 ... -
jquery总结
2012-07-05 16:32 1049接触jquery比较长时间了,今天总结一下jquery的用法 ... -
javascript禁止空格
2012-05-14 13:29 0今天调试页面,学到一招,禁止输入框空格的绝招,太绝了.推荐给大 ... -
javascript 经典片段
2012-01-15 18:57 924http://www.codebit.cn/ -
prototype属性
2011-11-29 17:54 1061Function.prototype.getName = fu ... -
转:javascript共有静态方法,私有静态方法,特权方法的区别
2011-11-29 16:24 1682JavaScript中,每个function都拥有一个原型对象 ... -
jquery插件开发
2011-10-27 00:32 1087<!DOCTYPE HTML PUBLIC " ... -
javascript中prototype方法修改
2011-08-12 19:15 999今天做页面时发现了一个方法replace在匹配字符串时 &l ... -
javascript匹配正则
2011-08-05 00:48 1047正则表达式一直是自己的弱项,最近有机会恶补一下,论坛最近有人发 ... -
javascript集中创建事件方法
2011-08-05 00:26 1041最近看论坛关于动态创建javascript事件的帖子,自己也恶 ... -
收藏一个牛人的blog,学习javascript可以去看看
2011-05-31 18:59 1710http://www.cnblogs.com/rubylouv ... -
15款jquery特效
2011-05-24 14:39 969juqery插件写的几款特效,在项目中可能用到,在这里分享给大 ... -
javascript延迟加载外部js文件
2011-05-18 11:28 2160function _GetJsData(url, callba ... -
window 添加多个onload方法
2011-05-05 20:38 1134function addLoadEvent(fun){ ... -
javascript中的隐藏的对象
2011-04-30 19:41 990Call Apply prototype var person ... -
[转载]Ext.extend的理解 javascript
2011-04-30 14:11 977(转)http://hi.baidu.com/_ollie/b ...
相关推荐
总的来说,JavaScript树形菜单是通过DOM操作和事件处理来实现的。在实际项目中,可能会结合使用前端框架如React、Vue或Angular,以及第三方库如jQuery UI或jsTree,以简化开发并提供更丰富的功能。在压缩包中的"树形...
JavaScript树形目录是一种在网页应用中组织数据结构的方法,它以层级关系呈现,类似于计算机文件系统的目录结构。这种数据结构在各种应用场景中都非常常见,比如网站导航、文件管理器、组织图表等。在这个主题中,...
javascript树形菜单
"百万节点javascript树"项目专注于解决这个问题,允许开发者创建一个包含100万个节点的树。这种能力对于处理大量数据,如文件系统、组织架构或者复杂的依赖关系图,具有重要意义。 在JavaScript中,树通常通过对象...
JavaScript树形控件是一种在网页中用于展示层次结构数据的交互式组件,它通常以节点的形式呈现,每个节点可以展开或折叠,展示其子节点。这种控件在各种应用场景中非常常见,例如文件目录浏览、组织结构展示、菜单...
总的来说,构建JavaScript树形菜单涉及的技术包括HTML结构设计、CSS样式控制、JavaScript DOM操作、事件处理、数据结构和算法(如遍历树形结构)、以及可能的异步加载和动画效果。通过这些技术的组合,我们可以创建...
JavaScript树是一种在Web应用中常用来展示层次结构数据的交互式元素。在JavaScript中实现树形结构,可以方便用户以图形化方式查看和操作数据,比如文件系统、组织架构或菜单系统。"Javascript树"通常涉及到DOM操作、...
实现JavaScript树形菜单的基本步骤包括: 1. **定义节点对象**:创建一个Node类或对象,包含节点值、子节点数组和其他属性(如是否展开等)。 2. **构建数据结构**:根据实际需求,构建树的数据结构,即定义各个...
JavaScript树形菜单是一种在网页中实现层次结构数据展示的交互方式,它通常用于导航、文件管理、选项配置等场景。"带复选框"的JS树形菜单则更进一步,允许用户通过勾选复选框来选择或操作树节点,为用户提供了一种...
JavaScript树形目录(Tree)是一种数据结构,常用于在网页中展示层次化的信息,比如文件系统、组织架构或导航菜单。这种数据结构以节点的形式表示,每个节点可以有零个或多个子节点,形成一种“父节点-子节点”的...
JavaScript树形控件是一种在网页上实现层次结构展示的用户界面元素,通常用于展示目录结构、组织架构或者数据分类等。由于HTML标准中并未内置这样的组件,开发者需要借助JavaScript库或者自定义代码来创建这样的功能...
JavaScript树是一种数据结构,它代表了层次化的节点集合,这些节点通过父节点和子节点的关系组织起来,类似于自然界中的树状结构。在编程中,树常用于表示具有层级关系的数据,例如文件系统、HTML DOM(文档对象模型...
JavaScript树在Web开发中是一种常见的数据结构,常用于构建导航菜单、组织结构图或文件系统目录等。在JavaScript中实现树形结构,主要是通过对象和数组来模拟实际的树节点和层级关系。在这个场景下,"给定当前节点的...