zoukankan      html  css  js  c++  java
  • 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树根>









  • 相关阅读:
    4.PHP正则表达式与数组
    3.PHP条件语句及其字符串相关函数
    3.PHP条件语句及其字符串相关函数
    2.PHP语言基础
    2.PHP语言基础
    1.简单认识PHP和环境搭建
    1.简单认识PHP和环境搭建
    Windows PE 第十章 加载配置信息
    #Leetcode# 20.Valid Parentheses
    #Leetcode# 14. Longest Common Prefix
  • 原文地址:https://www.cnblogs.com/meetrice/p/1224458.html
Copyright © 2011-2022 走看看