欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JXTree對象,讀取外部xml文件數(shù)據(jù),生成樹的函數(shù)

 更新時間:2007年04月02日 00:00:00   作者:  
/******************************************
*JXTree對象,讀取外部xml文件數(shù)據(jù),生成樹
*@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文件里定義為節(jié)點屬性
    *level 節(jié)點層次,從-1開始(即根節(jié)點)
    *_click 節(jié)點click,在xml文件定義為節(jié)點屬性[可選]
    *isLast 是否為本節(jié)點所在層次最后一個節(jié)點
    *parent_isLast 父節(jié)點是否為父節(jié)點所在層次的最后一個節(jié)點
    *toHTML 本節(jié)點轉(zhuǎn)成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;//節(jié)點的層次
        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 節(jié)點名稱
    ******************************/
    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 節(jié)點值
    ******************************/
    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 節(jié)點構(gòu)建結(jié)束,開始解釋XML文件************/

    var DOMRoot=XMLDom.loadXML(xmlURL).documentElement;//同步加載XML文件
    var level = -1;//root節(jié)點level
    var stack = new Array(1);
    result.push("<div><div class='root'></div><span class='text'>"+XMLDom.getAttribute(DOMRoot,"name")+"</span></div>");
    //解釋xml文件內(nèi)容成樹狀態(tài)展開的HTML代碼,遞歸調(diào)用
    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"){//節(jié)點為樹葉
                var textNode = new TextNode(elements.item(i),level);
                result.push(textNode.toHTML());
                textNode = null;//及時釋放對象
            }
            else if(elements.item(i).nodeType ==1){//節(jié)點為樹枝
                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();
    }

    //得到解釋結(jié)果并返回
    this.getTree = function(){
        this.parseXML(DOMRoot);
        DOMRoot = null;//釋放DOM對象
        return result.join("");
    }
    /*************靜態(tài)屬性***************/
    JXTree.curText = null;//當(dāng)前文本的id

    /************靜態(tài)方法***************/
    JXTree.changeState = function (id){//展開或者收縮節(jié)點內(nèi)容
        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;
    }
}

相關(guān)文章

  • js 可選鏈操作符的使用

    js 可選鏈操作符的使用

    可選鏈操作符(?.)允許讀取位于鏈接對象鏈身處的屬性的值,本文就詳細(xì)的介紹一下,感興趣的小伙伴們可以參考一下
    2021-06-06
  • JS動態(tài)的把左邊列表添加到右邊的實現(xiàn)代碼(可上下移動)

    JS動態(tài)的把左邊列表添加到右邊的實現(xiàn)代碼(可上下移動)

    在javascript前端開發(fā)過程中經(jīng)常見到動態(tài)的把左邊列表添加到右邊,基于js代碼怎么實現(xiàn)的呢?今天小編通過本文給大家介紹下js 左邊列表添加到右邊的實現(xiàn)方法,感興趣的朋友一起看看吧
    2016-11-11
  • ES6中export?default和export之間的區(qū)別詳解

    ES6中export?default和export之間的區(qū)別詳解

    export和export?default都是es6語法中用來導(dǎo)出組件的,可以導(dǎo)出的文檔類型有(?數(shù)據(jù)、常量、函數(shù)、js文件、模塊等),下面這篇文章主要給大家介紹了關(guān)于ES6中export?default和export之間的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • js實現(xiàn)金山打字通小游戲

    js實現(xiàn)金山打字通小游戲

    這篇文章為大家詳細(xì)主要介紹了js實現(xiàn)金山打字通小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • layui table 參數(shù)設(shè)置方法

    layui table 參數(shù)設(shè)置方法

    今天小編就為大家分享一篇layui table 參數(shù)設(shè)置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 在Layui中實現(xiàn)開關(guān)按鈕的效果實例

    在Layui中實現(xiàn)開關(guān)按鈕的效果實例

    今天小編就為大家分享一篇在Layui中實現(xiàn)開關(guān)按鈕的效果實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 小程序組件傳值和引入sass的方法(使用vant Weapp組件庫)

    小程序組件傳值和引入sass的方法(使用vant Weapp組件庫)

    這篇文章主要介紹了小程序組件傳值和引入sass使用vant Weapp組件庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • js如何監(jiān)聽input輸入事件及使用防抖封裝函數(shù)處理方法

    js如何監(jiān)聽input輸入事件及使用防抖封裝函數(shù)處理方法

    這篇文章主要給大家介紹了關(guān)于js如何監(jiān)聽input輸入事件及使用防抖封裝函數(shù)處理方法的相關(guān)資料,最近有一個需求,需要我們實時監(jiān)聽input輸入框中的內(nèi)容,從而帶來更好的用戶體驗,需要的朋友可以參考下
    2023-07-07
  • 詳解ES6系列之私有變量的實現(xiàn)

    詳解ES6系列之私有變量的實現(xiàn)

    這篇文章主要介紹了詳解ES6系列之私有變量的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • JavaScript實例--實現(xiàn)計算器

    JavaScript實例--實現(xiàn)計算器

    這篇文章主要介紹了JavaScript實現(xiàn)計算器,下面文章實現(xiàn)計算器作為學(xué)習(xí)期間的一個小練習(xí),需要的小伙伴可以參考一下,希望對你有所幫助
    2022-01-01

最新評論