Ext树工具类 Jsontree和Xmltree

使用说明:
使用本工具类,可以快速从xml和json文件中创建EXT树.
预览:

tree.html:

<SCRIPT src="js/jsontree.js" type=text/javascript></SCRIPT>
<SCRIPT src="js/xmltree.js" type=text/javascript></SCRIPT>
</HEAD>
<BODY>
<div id="jsontree"></div>
<div id="xmltree"></div>
</BODY>
</HTML>
<script type="text/javascript">
Ext.BLANK_IMAGE_URL = 'js/ext-2.0/resources/images/default/s.gif';
var jsontree = new createJsonTree("jsontree", "tree.json", function() {
    jsontree.render();
    this.getRootNode().expand();
});

var menuTree = new createXmlTree("xmltree", "tree.xml", function() {
    menuTree.render();
    this.getRootNode().expand();
});
</script>

 


jsontree.js:

function createJsonTree(el, url, callback) {

    var tree = new Ext.tree.TreePanel({
        el : el,
        animate : true,
        border : false,
        autoHeight : true,
        rootVisible : true
    });

    var treeNodesFromArray = function(parentNode, children) {

        Ext.each(children, function(child) {
            var node = new Ext.tree.TreeNode({
                text : child.text,
                url : child.url,
                color : child.color,
                menuid : child.menuid,
                expanded : child.expanded
            });
            if (!parentNode) {
                tree.setRootNode(node);
            } else {
                parentNode.appendChild(node);
            }

            if (child.children) {
                treeNodesFromArray(node, child.children);
            }
        }, this);
    };

    try {

        var proxy = new Ext.data.HttpProxy({
            url : url
        });

        proxy.on("loadexception", function(o, response, e) {
            if (e)
                throw e;
        });

        proxy.load(null, {
            read : function(response) {
                var treeJson = Ext.util.JSON.decode(response.responseText);
                treeNodesFromArray(null, treeJson);
                callback.call(tree);
            }
        }, function() {
        }, this);

    } catch (e) {

    }
    return tree;
}

 


xmltree.js

function loadXMLext(xmlStr) {

    if (!xmlStr)
        return null;
    if (window.ActiveXObject) {
        var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
    } else {
        if (document.implementation && document.implementation.createDocument) {
            var xmlDom = document.implementation
                    .createDocument("", "doc", null)
        }
    }
    xmlDom.async = true;
    try {
        xmlDom.loadXML(xmlStr);
    } catch (e) {
        var oParser = new DOMParser();
        xmlDom = oParser.parseFromString(xmlStr, "text/xml");
    }
    return xmlDom;
}

function createXmlTree(el, xmlsrc, callback) {

    var tree = new Ext.tree.TreePanel({
        el : el,
        animate : true,
        border : false,
        autoHeight : true,
        rootVisible : true
    });

    var xmlDom = loadXMLext(xmlsrc);
    try {
        tree.setRootNode(treeNodeFromXml(xmlDom.documentElement || xmlDom));
        callback.call(tree);
    } catch (e) {

        var p = new Ext.data.HttpProxy({
            url : xmlsrc
        });

        p.on("loadexception", function(o, response, e) {
            alert("loadException");
        });

        p.load(null, {
            read : function(response) {
                var doc = response.responseXML;
                tree.setRootNode(treeNodeFromXml(doc.documentElement || doc));
            }
        }, callback, tree);

    }
    return tree;
}

function treeNodeFromXml(XmlEl) {

    var t = ((XmlEl.nodeType == 3) ? XmlEl.nodeValue : XmlEl.tagName);
    if (t.replace(/\s/g, '').length == 0) {
        return null
    }
    var result = {
        text : t
    };

    if (XmlEl.nodeType == 1) {

        Ext.each(XmlEl.attributes, function(a) {
            if (a.nodeName == "href" && XmlEl.hasChildNodes())
                return;
            result[a.nodeName] = a.nodeValue;
        });

        result = new Ext.tree.TreeNode(result);
        Ext.each(XmlEl.childNodes, function(el) {
            if ((el.nodeType == 1) || (el.nodeType == 3)) {
                var c = treeNodeFromXml(el);
                if (c) {
                    result.appendChild(c);
                }
            }
        });
    }
    return result;
}

 


示例数据tree.json:

[{
    text : 'json树根',
    url : 'root',
    menuid : 'root',
    expanded : true,
    children : [{
        text : 'json节点一',
        url : '001',
        menuid : '01',
        expanded : true
    }, {
        text : 'json节点二二',
        expanded : true,
        children : [{
            text : 'json节点三',
            url : '003',
            menuid : '03',
            expanded : true
        }, {
            text : 'json节点四',
            url : '004',
            menuid : '04',
            expanded : true
        }]
    }]
}]

 

 

示例数据tree.xml:

<xml树根 expanded="true" menuid="10000" >
  <xml节点一 expanded="true" menuid="10005" /> 
  <xml节点二 expanded="true" menuid="10007"  /> 
</xml树根>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值