json 트 리 데이터 하위 노드 재 귀적 으로 모든 부모 노드 를 찾 는 방법

앞에서 말 했 듯 이 프로젝트 에서 직렬 선택 을 할 때 많은 전단 UI 프레임 워 크 는 클릭 한 마지막 층 의 수치 만 되 돌아 오지 만 상세 한 페이지 가 렌 더 링 할 때 데이터 의 등급 을 모두 표시 해 야 한다.
해결 방법:

<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>json-querytitle>
    <script type="text/javascript">
    var json = [{"value":"1","text":"  ","pid":"0","children":[{"value":"2","text":"   ","pid":"1","children":[{"value":"3","text":"   ","pid":"2","children":[{"value":"4","text":"   ","pid":"3","children":[]},{"value":"5","text":"   ","pid":"3","children":[]},{"value":"6","text":"   ","pid":"3","children":[{"value":"fe8de48f20e54590bf60a83c4485a650","text":"   ","pid":"6","children":[]},{"value":"4ac6d79609b5496f9296614ef4166ac7","text":"   ","pid":"6","children":[]}]}]}]}]}]
    script>

    <script type="text/javascript">
    /**
     *     JSON      
     */
    var parentNode = null;
    var node = null;

    /**
     *   text           
     */
    function getNode(json, text) { 

        //1.    root       JSON
        for (var i = 0; i < json.length; i++) {
            if (node) {
                break;
            }
            var obj = json[i];
            //      
            if (!obj || !obj.text) {
                continue;
            }

            //2.       ,      
            if (obj.text == text) {
                //    text     ,    
                node = obj;
                break;
            } else {
                //3.          
                if (obj.children&&obj.children.length!=0) {
                    //4.   ,      ,  parent   
                    parentNode = obj;
                    //     
                    getNode(obj.children, text);
                } else {
                    //      ,      
                    continue;
                }
            }
        }

        //5.         ,  null,        
        if (!node) {
            parentNode = null;
        }

        //6.    obj
        return {
            parentNode: parentNode,
            node: node
        };
    }

    //    
    var query = '   ';
    var result = [];
    var getResult = function(json,query){
        node = null;
        parentNode = null;
        var obj = getNode(json, query);
        //      
        if(obj.parentNode){
            //    
            console.log("  text:" + query + ",   :" + obj.node.text + " ->   :" + (obj.parentNode ? obj.parentNode.text : '    !'));
            //     text      
            getResult(json,obj.parentNode.text);
            result.push(obj.parentNode.text);
        }
        return result;
    }
    getResult(json,query);
    //     push result 
    result.push(query);
    console.log(result);//['  ','   ','   ','   ','   ']
    script>
head>

<body>
body>

html>

내용 은 자신의 수정 을 거 쳐 이 블 로 그 는 다음 과 같이 전재 되 었 다.http://www.cnblogs.com/ae6623/p/5264128.html

좋은 웹페이지 즐겨찾기