jQuery TreeView

找了一个jQuery的树形插件,自己添加了增、删、改、查,与数据库交互(SQL Server 2005)。

支持3层节点,要扩展也可以,并不完善,欢迎提出意见

截图:

客户端主要代码:

<div id="divMove">
    <input id="btnAdd" type="button" value="添加" /><input id="btnDel" type="button" value="删除" /></div>
<div id="divTree">
    <ul id="red" class="treeview-red">
    </ul>
</div>

以后变更的树形内容都在ul下面。

主要的js文件代码:

//--Author:Vincent
$(document).ready(function(){
//bulid xmlHttpRequest
    var xmlHttp;
    var oClick;//which mouse up
    if(window.ActiveXObject)
    {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest)
    {
        xmlHttp=new XMLHttpRequest();
    }
    var post="op=2";//bind data from database
    var url=document.location.href;
    xmlHttp.open("POST",url,true);
    xmlHttp.onreadystatechange=callback;
    xmlHttp.setRequestHeader("Content-Length",post.length);
    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    xmlHttp.send(post);

    //add
    $("#btnAdd").click(function(event){
//        var oUL=document.getElementById("red");
//        var oLI=document.createElement("li");
//        var oInput=document.createElement("input");
//
//        oInput.setAttribute("class","treenode");
//        oInput.setAttribute("value","New Node");
//        oInput.setAttribute("type","text");
//
//        oLI.appendChild(oInput);
//        oUL.appendChild(oLI);
        var oNode=oClick;
        var array=new Array();

        for(var i=0;i<document.childNodes.length;i++)
        {
            if(oNode.parentNode.parentNode.parentNode.tagName=="LI")
            {
                var oo=oNode.parentNode.parentNode.parentNode.childNodes[1].value;
                array[i]=oo;
                oNode=oNode.parentNode.parentNode;
            }
            else
                break;
        }
        if(array.length==0)
        {
            post="op=1&sort="+oClick.value+"|NewNode1.0|NewNode1.0.0";
        }
        else if(array.length==1)
        {
            post="op=1&sort="+array[0]+"|"+oClick.value+"|NewNode1.0.0";
        }
        else if(array.length==2)
        {
            post="op=1&sort="+array[1]+"|"+array[0]+"|NewNode1.0.0";
        }

        //post="op=1&sort=NewNode1.0|NewNode1|NewNode1.0.0";//add new data
        xmlHttp.open("POST",url,true);
        xmlHttp.onreadystatechange=callback;
        xmlHttp.setRequestHeader("Content-Length",post.length);
        xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xmlHttp.send(post);
    });
    //delete
    $("#btnDel").click(function(event){

        if(confirm('Are you sure to clear or delete?'))
        {
            var oNode=oClick;
            var array=new Array();

            for(var i=0;i<document.childNodes.length;i++)
            {
                if(oNode.parentNode.parentNode.parentNode.tagName=="LI")
                {
                    var oo=oNode.parentNode.parentNode.parentNode.childNodes[1].value;
                    array[i]=oo;
                    oNode=oNode.parentNode.parentNode;
                }
                else
                    break;
            }
            post="op=4&sort=";

            for(var i=0;i<array.length;i++)
            {
                post+=array[i]+"|";

                if(i==array.length-1)
                {
                    post=post.substring(0,post.length-1)+"|"+oClick.value;
                }
            }
            if(array.length==0)
            {
                alert('Can not to be deleted!');
                return;
            }
            xmlHttp.open("POST",url,true);
            xmlHttp.onreadystatechange=callback;
            xmlHttp.setRequestHeader("Content-Length",post.length);
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttp.send(post);
        }
    });
    //web visit callback
    function callback()
    {
        if(xmlHttp.readystate==4)
        {
            if(xmlHttp.status==200)
            {
                display();
            }
            else
            {
                alert("Server Back Status:"+xmlHttp.statusText);
            }
        }
        else//status is not success
        {
            document.getElementById("red").innerHTML="Data Loading";
        }
    }
    function display()
    {
        var index=xmlHttp.responseText.indexOf("<!DOCTYPE");
        var html=xmlHttp.responseText.substring(0,index);
        document.getElementById("red").innerHTML=html;

        reset();
    }

    function reset()
    {
        $("#red").treeview({
            animated: "fast",
            collapsed: true,
            unique: true,
            persist: "cookie",
            toggle: function() {
                window.console && console.log("%o was toggled", this);
            }
        });

        //double click textbox
        $("#divTree input").dblclick(function(event){
            $(this).addClass("focus");

            var oDiv=document.getElementById("divMove");
            oDiv.style.display="none";
        });
        //textbox mouseout
        $("#divTree input").mouseout(function(event){
            $(this).removeClass("focus");
        });

        //textbox enter
        $("#divTree input").keydown(function(event){
            if(event.keyCode==13)
            {
                $(this).removeClass("focus");

                var oNode=this;
                var array=new Array();

                for(var i=0;i<document.childNodes.length;i++)
                {
                    if(oNode.parentNode.parentNode.parentNode.tagName=="LI")
                    {
                        var oo=oNode.parentNode.parentNode.parentNode.childNodes[1].value;
                        array[i]=oo;
                        oNode=oNode.parentNode.parentNode;
                    }
                    else
                        break;
                }
                post="op=3&sort=";

                for(var i=0;i<array.length;i++)
                {
                    post+=array[i]+"|";

                    if(i==array.length-1)
                    {
                        post=post.substring(0,post.length-1)+"|"+this.value+"|"+this.defaultValue;
                    }
                }
                if(array.length==0) post+=this.value+"|"+this.defaultValue;
                xmlHttp.open("POST",url,true);
                xmlHttp.onreadystatechange=callback;
                xmlHttp.setRequestHeader("Content-Length",post.length);
                xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                xmlHttp.send(post);
            }
        });

        $(".treenode").mouseup(function(event){

            var oDiv=document.getElementById("divMove");

            oDiv.style.left=event.clientX;
            oDiv.style.top=event.clientY;
            oDiv.style.display="block";

            oClick=$(this).get(0);
            //alert(event.clientY+" "+event.clientX);

        });
        $("#divTree").mouseover(function(event){
            var oDiv=document.getElementById("divMove");
            oDiv.style.display="none";
        });
    }
});

时间: 2024-10-31 01:18:41

jQuery TreeView的相关文章

Jquery.Treeview+Jquery UI制作Web文件预览

效果图: 前台Html: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="_26.QingShan.WebFileViewer._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q

jquery treeview 数据库数据生成树

问题描述 jquery treeview 数据库数据生成树 用juqery的treeview插件 现页面代码 <select id=""s1""> <c:forEach items=""${producttypeplist}"" var=""producttype""> <option value=""${producttype.id }

基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合_jquery

本文支持两种方式的数据,一种为List集合,一种为json字符串. 先来介绍一下后台返回list集合(推荐使用此方法): 控制器代码如下: public static List<TC_DictionaryInfo> DInfo = new List<TC_DictionaryInfo>(); /// <summary> /// TreeView视图 /// </summary> /// <returns></returns> publ

Jquery.TreeView结合ASP.Net和数据库生成菜单导航条_jquery

下面的例子将结合项目实际运用来使用Jquery.TreeView,当然在使用控件树需要现在相应的js文件 下面就把我生成的TreeView展现给大家看看希望对大家有所帮助!在使用之前需要下载控件树的js文件和Css样式 介绍一下表结构 M_ID M_Name M_ParentID M_URL M_Sort 然后新建一个网站,在新建的网站下添加CSS文件夹和js文件夹分别用于存放Css样式和JS,同时再添加一个image文件夹用于存放TreeView的图片 接着我们就开始实现我们的功能了! 前台代

为jQuery.Treeview添加右键菜单的实现代码_jquery

先上图: jquery.treeview 数据通过JSON数据加载,有需要的朋友,可以通jquery的AJAX方法获取相关的JSON数据 json的数据格式:{"id":1,"parentid":0,"title":"标题","children":[{ ...}]} 需要两个jQuery 两件 (jquery.treeview.min.js 树插件 和 jquery.contextmenu.r2.js 右键

基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合_jquery

在上篇给大家介绍了基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串.list集合. 这种方式其实还是利用list集合的方式传给前台,只不过在前台做了一些小小的变化,而控制器代码也进行了部分的优化,值的一提的是:没用的ajax前后台交互舍弃掉了. 控制器代码如下: //实例化公共静态字典表集合 public static List<TC_DictionaryInfo> DInfo = new List<TC_DictionaryInfo

Jquery.TreeView结合ASP.Net和数据库生成菜单导航条

后台代码   using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols; using system.data; using system.data.sqlclient; using system.web.ui.htmlcontrols; public partial class _

jQuery插件treeview点击节点名称不展开、收缩节点

修改jquery.treeview.js文件中的applyClasses方法(注释掉两行代码): 修改后的applyClasses方法如下: applyClasses: function(settings, toggler) {/* this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) { toggler.apply($(this).next()); }

打造基于jQuery的高性能TreeView(asp.net)_jquery

根据我的项目实践情况,主要是几个关键点: 1:支持静态的树,即一次性将全部数据加载到客户端.2:异步树,即一次只加载一级或若干级节点,子节点可以异步加载数据.3:Checkbox树(可能是静态树也可能是异步树),用于选择(如选择组织机构,选择数据字典项)等,最好是能够支持节点级联(这个是难点)4:能够承载大数据量,并性能表现优异5:能够在主流浏览器中运行良好 那我要打造的TreeView就是为了实现这个5个主要指标的. 先来看下效果图 上图是中国行政区域的数据树,总共得节点是3500+. 那么我