JXTree对象,读取外部xml文件数据,生成树的函数_javascript技巧

/******************************************
*JXTree对象,读取外部xml文件数据,生成树
*@author brull
*@email brull@163.com
*@date 2007-03-27
*******************************************/

/*
 *@param xmlURL XML文件的地址
 */
var JXTree = function(xmlURL)
{
    var result = new Array();

    /*****************************
    *首先定义TreeNode抽象对象
    *TreeNode对象属性:
    *id 唯一编号,必须在xml文件里定义为节点属性
    *level 节点层次,从-1开始(即根节点)
    *_click 节点click,在xml文件定义为节点属性[可选]
    *isLast 是否为本节点所在层次最后一个节点
    *parent_isLast 父节点是否为父节点所在层次的最后一个节点
    *toHTML 本节点转成HTML代码的方法
    *******************************/
    var TreeNode = function (node,level)
    {
        var parent_elements = node.parentNode ? (node.parentNode.parentNode ? node.parentNode.parentNode.childNodes : null) : null;
        var elements = node.parentNode ? node.parentNode.childNodes : null;
        this.id = XMLDom.getAttribute(node,"id") ? XMLDom.getAttribute(node,"id") : "";
        this.level = level;//节点的层次
        this.isLast = elements ? ((elements.item(elements.length-2) === node) ? true : false) : false;
        this._click = XMLDom.getAttribute(node,'click') ? XMLDom.getAttribute(node,'click') : "";
        this.toHTML = null;//function
    }

    /*****************************
    *ElementNode对象,继承自抽象对象TreeNode
    *新增属性:
    *_nodeName 节点名称
    ******************************/
    var ElementNode = function(node,level)
    {
        TreeNode.apply(this,arguments);
        this._nodeName = XMLDom.getAttribute(node,"name") ? XMLDom.getAttribute(node,"name") : "";
        this.toHTML = function(){
            var result = "";
            if(this.isLast) result += "<div><div class='minus_bottom'";
            else result += "<div><div class='minus'";
            result += " id='"+this.id+"_join' onclick=\"JXTree.changeState('"+this.id+"')\"></div><div id='"+this.id+"_folder' class='folder_open'></div><span class='text' onclick=\""+this._click+"\">"+this._nodeName+"</span></div>";
            return result;
        }
    }

    /*****************************
    *TexNode对象,继承自抽象对象TreeNode
    *属性和TreeNode一样
    *新增属性:
    *_nodeValue 节点值
    ******************************/
    var TextNode = function(node,level)
    {
        TreeNode.apply(this,arguments);
        this._nodeValue = node.firstChild.nodeValue;
        this.toHTML = function(){
            var result = "";
            if(this.isLast) result += "<div><div class='join_bottom'></div>";
            else result += "<div><div class='join'></div>";
            result += "<div class='page'></div><span class='text' id='"+this.id +"_item' onclick=\"JXTree.setFocus(this.id);"+this._click+"\">"+this._nodeValue+"</span></div>";
            return result;
        }
    }

    /**********Node 节点构建结束,开始解释XML文件************/

    var DOMRoot=XMLDom.loadXML(xmlURL).documentElement;//同步加载XML文件
    var level = -1;//root节点level
    var stack = new Array(1);
    result.push("<div><div class='root'></div><span class='text'>"+XMLDom.getAttribute(DOMRoot,"name")+"</span></div>");
    //解释xml文件内容成树状态展开的HTML代码,递归调用
    this.parseXML = function(node){
        stack.push(level);
        level++;
        var element = new ElementNode(node,level);
        var elements = node.childNodes;
        if(level != 0){
            if(element.isLast)
                result.push("<div id='"+element.id+"_body' class='body_empty'>");
            else
                result.push("<div id='"+element.id+"_body' class='body_line'>");
        }
        for(var i=0;i<elements.length;i++){
            if(elements.item(i).nodeName == "item"){//节点为树叶
                var textNode = new TextNode(elements.item(i),level);
                result.push(textNode.toHTML());
                textNode = null;//及时释放对象
            }
            else if(elements.item(i).nodeType ==1){//节点为树枝
                var elementNode = new ElementNode(elements.item(i),level);
                result.push(elementNode.toHTML());
                elementNode = null;//及时释放对象
                this.parseXML(elements.item(i));
            }
        }
        if(level != 0)result.push("</div>");
        level = stack.pop();
    }

    //得到解释结果并返回
    this.getTree = function(){
        this.parseXML(DOMRoot);
        DOMRoot = null;//释放DOM对象
        return result.join("");
    }
    /*************静态属性***************/
    JXTree.curText = null;//当前文本的id

    /************静态方法***************/
    JXTree.changeState = function (id){//展开或者收缩节点内容
        var _body = document.getElementById(id + "_body");
        var _join = document.getElementById(id+"_join");
        var folder = document.getElementById(id+"_folder");
        (_body.style.display == "none") ? (
            _body.style.display = "block",
            _join.className = _join.className.replace("plus","minus"),
            folder.className = "folder_open"
        ) : (
            _body.style.display = "none",
            _join.className = _join.className.replace("minus","plus"),
            folder.className = "folder_close"
        )
    };//changeState
    JXTree.setFocus = function(id){
        if(JXTree.curText)
            with(document.getElementById(JXTree.curText).style){
                backgroundColor = "";
                color = "#000";
            }
            with(    document.getElementById(id).style){
                backgroundColor = "#003366";
                color = "#FFF";
            }
        JXTree.curText = id;
    }
}

时间: 2024-12-26 09:36:30

JXTree对象,读取外部xml文件数据,生成树的函数_javascript技巧的相关文章

通过Javascript读取本地Excel文件内容的代码示例_javascript技巧

读取本地Excel文件内容的Javascript代码: 复制代码 代码如下: <script type="text/javascript">function read_excel(){     var filePath="D:\abcd9.com.xls"; //要读取的xls    var sheet_id=2; //读取第2个表    var row_start=3; //从第3行开始读取    var tempStr='';    try{    

sql 2005 clr编程 能否实现webservice引用和读取外部xml文件内容!

问题描述 我用vs2005sql项目写存储过程,现时有个问题,就是在项目中写个类,有个方法publicstringHelloWorld(){return"HelloWorld";}这个方法直接返回值没问题.但是我想读取xml中的数据.publicstringGetXmlData(){XmlDocumentdoc=newXmlDocument();doc.Load(sXmlPath);XmlNodenode=doc.SelectSingleNode("Data").S

读取外部xml后的结果,跟url直接访问的数据一低关系都没有,怎么弄?

问题描述 读取外部xml后的结果,跟url直接访问的数据一低关系都没有,怎么弄? <?xml version=""1.0""?> 解决方案 怎么读的,是不是缺少参数说明的,也可能是判断了来源地址了什么的,不在来源里面就输出其他的内容 解决方案二: sb.append(""<Header AllianceID=""""); sb.append(ConfigData.AllianceId);

JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)_javascript技巧

本文实例讲述了JS读取XML文件数据并以table形式显示数据的方法.分享给大家供大家参考,具体如下: 先看xml文件: <?xml version="1.0" standalone="yes"?> <student> <stuinfo> <stuName>张秋丽</stuName> <stuSex>女 </stuSex> <stuAge>18</stuAge>

在Java中读取写入XML文件(DEMO_004)

1.如果要将读取的XML文件,再写入另外的一个新XML文件中,首先必须新建一个和要读取相对应的beans类,通过set方法填充数据,get方法获取数据. 2.在读取XML文件的时候,需要用到ArrayList集合来存储每次从原XML文件里面读取的数据,在写入新的XML文件的时候,也要通过ArrayList集合获取要遍历的次数,同时将数据写入到新的xml文件中 3.详细代码如下: public static void main(String[] args) { try { String url =

ajax读取properties资源文件数据的方法_AJAX相关

本文实例讲述了ajax读取properties资源文件数据的方法.分享给大家供大家参考.具体实现方法如下: properties资源文件的内容如下: hello=englishww name=english zk emailEmpty=Field cannot be empty! emailInvalid=Invalid email address! js调用ajax处理代码: $.ajax({ type:'POST', dataType:'json', url:'/jeecms/jeecms/

request-jsp读取后台xml的数据

问题描述 jsp读取后台xml的数据 我在后台已经把xml里面的数据全部读取出来了 这些数据存到request里面 然后去jsp页面去循环 但是在循环的过程中后一条数据会将前一条数覆盖 我该怎样不让数据被覆盖 解决方案 你要搞清楚,你为什么需要循环,循环需要解决什么问题? 还有,你没次循环后,对循环的数据需要进行展示吗?? 解决方案二: 读出一条就显示一条了呗 解决方案三: 将xml数据读取出来时,采用怎样的信息封装方式,是用对象封装还是map封装?jsp页面循环显示,如果是在表格中显示,可以考

ajax读取properties资源文件数据的方法

本文实例讲述了ajax读取properties资源文件数据的方法.分享给大家供大家参考.具体实现方法如下: properties资源文件的内容如下: hello=englishww name=english zk emailEmpty=Field cannot be empty! emailInvalid=Invalid email address! js调用ajax处理代码: $.ajax({ type:'POST', dataType:'json', url:'/jeecms/jeecms/

JavaScript使用Microsoft.XMLDOM读取远程XML文件内容

  JS使用Microsoft.XMLDOM读取远程XML文件内容,为啥要远程读取呢?其实举个例子就明白了,因为最近要搞一个远程读取天气信息的ajax页面,天气信息是远程网站的内容,是以XML文件方式存在的,所以我们要实现AJAX,就需要在JS中读取XML文件,开始觉得好难啊,其实做出来,也就不这么认为了. 在上述代码中,http://****.com/ajax/weather.asp?subcode=b55就是远程网站的天气XML信息,用ASP生成的xml,这里直接调用了XMLDOM组件进行读