`

封装一个树形菜单二——JS渲染树

阅读更多

Part1:Get a tree widget

Here are many useful tree widgets :http://www.ajaxline.com/best-javascript-tree-widgets

 

I chose the one which is easiest to use ---- dtree, through which I can create a powful tree by just importing the given dtree.js file.

 

Here is the official website of dtree and you can find api and examples:

http://destroydrop.com/javascripts/tree/

 

 添加一个节点,可以指定该节点跳转的URL,例子中没有写点击后,怎么执行一个js事件,补充一下:

 

//跳转到example01.html页面
d.add(10,9,'The trip to Iceland','example01.html','Pictures of Gullfoss and Geysir');

//执行alert
d.add(11,9,'Mom\'s birthday','javascript:alert(\'bb\')');

 

这里javascript里面只能写单引号,再转意,因为dtree.js文件中用了双引号,如果写成javascript:alert(" bb" ),是搞不定的。

 

 

Part2:Write an ASP widget to get the data from webserver and pass them to dtree.

see the workout ~

 

First,write an asp page to allow the tree to be showed when certain button is clicked.

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="dtree.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:button Text="click" OnClick="AddBtn_Click" runat="server" />
    </div>
    </form>
</body>
</html>

 Second, the cs file to fulfill the AddBtn_Click event, which would fetch the data from the web server and draw the proper tree with the help of dtree js.

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using com.Origin.Base.test.mywork.Tree;
public partial class tree_Default : System.Web.UI.Page
{
    private ITreeReaderFactory factory = new XMLTreeRreaderFactory(@"D:\\menu.xml");
    protected void Page_Load(object sender, EventArgs e)
    {
       

    }
    public ITreeNode fetchRoot()
    {
        ITreeNode root = null;
        ITreeReader reader = factory.createTreeReader();
        root = reader.createTree();
        return root;
    }
    public void AddBtn_Click(object sender, EventArgs e) 
    {

        string rootName = (string)fetchRoot().getAttribute("name");
        string str = "";
        str += "<script type='text/javascript' src='dtree.js'></script>";
        str += "<script type='text/javascript'>";
        str += " d = new dTree('d');";

        ITreeNode root = fetchRoot();

        //把树转换为dtree的格式
        str += convertToDTree(root, null);
       

        //str += "d.add('用户管理',-1,'My example tree');";
        //str += "d.add('创建用户','用户管理','My example tree');";
        ////str += "d.add('创建员工','创建用户','创建员工');";
        ////str += "d.add('创建客户','创建用户,'创建客户');";
    

        str += "document.write(d);";

        str += "</script>";
        
        Response.Write(str);
    }
    public static string convertToDTree(ITreeNode root, string parent)
    {
        string name = (string)root.getAttribute("name");
        string url = (string)root.getAttribute("url");
        string add = "";
        if (parent == null)
        {
            add = "d.add('" + name + "',-1,'" + name + "');";
        }
        else
        {
            add = "d.add('" + name + "','" + parent + "','" + name + "');";
        }

        IList<ITreeNode> subNodes = root.getSubNodes();
        if (subNodes == null)
        {
            return add;
        }
        else
        {
            for (int i = 0; i < subNodes.Count; i++)
            {
                ITreeNode node = subNodes[i];
                add += convertToDTree(node, name);
            }
        }
        return add;
    }

}

 

OK~ the function is ...potboiled . Because there are many flaws and hard to be used. Next time I will make it widget and the path of the XML will not be hard coded any more. Also allow users to decide the words to math the key of name , url and so on. In conclusion , I will try to make the hard codes not be hard in the next version.

 

分享到:
评论

相关推荐

    封装一个树形菜单一——类设计

    标题“封装一个树形菜单一——类设计”指的是创建一个数据结构来表示树形菜单,这在很多应用程序,如图形用户界面(GUI)或者命令行接口(CLI)中非常常见。这类菜单允许用户通过层级结构选择操作。下面我们将深入...

    封装的dTree.js文件动态创建树形菜单

    dTree.js是一个轻量级的JavaScript库,专门用于构建交互式的树形菜单。它提供了丰富的API和配置选项,使得开发者能够方便地自定义树形菜单的样式、行为以及数据来源。以下我们将逐步介绍如何在项目中使用dTree.js。 ...

    js树形菜单,完全兼容

    综上所述,实现一个在各种浏览器下兼容的JavaScript树形菜单需要考虑面向对象的设计、浏览器特性的适配、HTML/CSS布局以及事件处理等多个方面。通过合理的代码组织和优化,可以在不同环境下提供一致且高效的用户体验...

    Div+Css+js树形菜单

    本项目以“Div+Css+js树形菜单”为主题,利用HTML的Div元素、CSS样式和JavaScript脚本来实现一个功能完备、视觉效果良好的树形菜单。 首先,Div是HTML中的一个布局容器,用于组织和控制页面内容的布局。在树形菜单...

    js+jsp树形菜单

    总之,"js+jsp树形菜单"是一个融合了前端与后端技术的实践,它展示了如何利用JavaScript和JSP协同工作,为用户提供交互性强、数据驱动的菜单界面。理解并掌握这一技术,对于Web开发者来说是非常有价值的。

    基于ztree封装的Vue树形组件,轻松实现海量数据的高性能渲染.zip

    "基于ztree封装的Vue树形组件,轻松实现海量数据的高性能渲染"这个项目,就是针对这一需求,将经典的zTree库与Vue.js相结合,为开发者提供了一个强大且高效的解决方案。 zTree是一个基于JavaScript的开源树形插件,...

    很不错的树形菜单(javascript+css)

    6. `js`:这个目录很可能包含了实现树形菜单功能的JavaScript代码,比如一个名为`tree.js`的文件,里面可能封装了菜单操作的逻辑。 通过这些文件,开发者可以学习到如何利用JavaScript和CSS来构建可交互的树形菜单...

    网页左侧的树形菜单 可进行多级分层

    此外,现代前端框架如React、Vue或Angular也有专门的组件库,提供了预封装的树形菜单组件,简化了开发过程。 在实际应用中,为了提高可访问性和可用性,还需要考虑以下几点: 1. 清晰的视觉指示:使用不同的图标或...

    树形菜单tag框架 非树形的点击事件

    - `tree.tag`文件很可能是一个自定义的JSP标签,用于简化树形或非树形菜单的构建。在Java Web开发中,自定义标签可以封装复杂的逻辑,使得视图层代码更简洁。 - `uitag`可能是一个包含通用UI组件的标签库,`tree....

    将树形菜单dTree封装成PHP函数

    下面是一个简单的PHP函数`generate_dTree()`的实现,它接受一个二维关联数组作为参数,其中键为节点ID,值为包含父节点ID、文本和子节点数组的数据: ```php function generate_dTree($data) { $output = ''; ...

    可以实现多级的树形菜单的js

    可以将树形菜单的逻辑封装为一个独立的组件,允许其他部分的代码轻松调用和配置。 在提供的压缩包文件"树形结构"中,可能包含了实现这些功能的JavaScript源代码,包括数据结构、DOM操作、事件处理、CSS样式等。通过...

    jquery拖拽树形菜单

    本文将详细讲解如何利用jQuery实现拖拽功能,并将其应用于树形菜单,帮助你创建交互性强、用户体验良好的Web应用。 一、jQuery基础 jQuery的核心理念是“Write Less, Do More”,通过封装JavaScript的常用功能,使...

    树形菜单,由javascript写成。

    这个压缩包文件“AlaiJSCtr”似乎包含了一个用JavaScript实现的树形菜单的代码资源,对于Web开发者来说是非常实用的。 JavaScript是一种广泛使用的客户端脚本语言,它在浏览器环境中运行,为网页添加交互性。在创建...

    js无限级树形菜单js无限级树形菜单js无限级树形菜单

    - 为了构建树形结构,我们需要一个合适的数据结构来存储节点信息。通常,我们会使用对象(Object)或数组(Array)来表示每个节点,其中包含节点的ID、文本、父节点ID、子节点列表等属性。 - 对象示例:`{id: 1, ...

    Struts 2项目 ajax动态生成树形菜单

    1. **数据库设计**:设计一个表来存储树形菜单的数据,例如:`menu_id`, `parent_id`, `menu_name`, `menu_url`等字段,其中`parent_id`用于表示菜单项的层级关系。 2. **Action类**:创建一个Struts2 Action类,...

    struts简单示例+js树形菜单

    - **交互处理**:当用户在树形菜单中选择一个节点时,JS可能发送AJAX请求到服务器,Struts Action接收到请求后进行相应处理,例如加载新的数据或执行特定操作。 5. **示例应用**: - 可能是一个简单的文件管理...

    常用的三种树形菜单->很实用的

    开发者只需要维护一个包含层级关系的数据结构,框架会自动渲染成相应的UI。例如,React中有许多成熟的组件库(如Ant Design、Material-UI等)提供了封装好的Tree组件,只需传入数据即可构建功能完善的树形菜单,同时...

    树形菜单.rar

    这个“树形菜单.rar”文件包含了一个使用纯HTML和JavaScript实现的树形菜单实例,对于学习前端开发或者需要在项目中应用树形菜单的开发者来说非常有价值。 首先,我们来详细了解HTML5在构建树形菜单中的作用。HTML5...

    汽车网站树形菜单js特效

    在汽车网站设计中,树形...总的来说,"汽车网站树形菜单js特效"是一个结合了js技术、DOM操作、事件处理和CSS样式的实例,旨在提升汽车网站的导航体验。理解并掌握这些知识点对于构建功能丰富且用户友好的网页至关重要。

Global site tag (gtag.js) - Google Analytics