本帖最后由 show_594 于 2014-08-22 16:09:49 编辑

解决方案 »

  1.   

    digui(data,7);
    function digui(data,id){
    for(var i in data){
    if(data[i]["id"]==id)
    alert(data[i]["text"]);
    if(data[i]["children"].length>0){

    digui(data[i]["children"],id);
    }

    }

    }
      

  2.   

    traverse(jsonObj[i], val)
    改成arguments.callee(jsonObj[i], val)
    试试看
      

  3.   


    运行没问题。但是改成接受digui的值。
    问题就出现了,跟我上面的代码一样。
    修改后:alert(digui(data,7));
    function digui(data,id){
    for(var i in data){
    if(data[i]["id"]==id)
    return data[i]["text"];
    if(data[i]["children"].length>0){
    digui(data[i]["children"],id);
    }

    }

    }
      

  4.   


    alert(digui(data,7));
    function digui(data,id){
    var s="";
    for(var i in data){
    if(data[i]["id"]==id){
    s= data[i]["text"];
    break; }
    if(data[i]["children"].length>0){

    s=digui(data[i]["children"],id);
    }

    }
    return s;

    }
      

  5.   

    感谢回复。
    试了下,即使使用arguments.callee调用自身。控制台依旧输出
    c
    null
    而不是想要的
    c
    c
      

  6.   

    首先非常感谢你的热心回复。你使用的是第2级的children Id 如果换成第3级。又获取不到了。
    我帖子的那个代码也有这个问题。如果不是19 而是2级分类的ID,也正常返回。
    但是使用3级ID就返回NULL。
      

  7.   

    首先非常感谢你的热心回复。你使用的是第2级的children Id 如果换成第3级。又获取不到了。
    我帖子的那个代码也有这个问题。如果不是19 而是2级分类的ID,也正常返回。
    但是使用3级ID就返回NULL。
    原因是递归的时候找到值后,递归没有结束 。
      

  8.   

        function get_text(obj,id){
            if(obj){
                for(var i = obj.length;i--;){
                    if(obj[i].id == id){
                        console.log(obj);
                        return obj[i].text || "";
                    }
                    var a = get_text(obj[i].children,id);
                    if(a){return a}
                }
            }
        }
        console.log(get_text(data,37));
      

  9.   

    function traverse(jsonObj, val) {
      for (var i in jsonObj) {
        if(typeof jsonObj[i] == "object") {
          if(jsonObj[i].id == val) {
            alert(jsonObj[i].text); //控制台 输出 c
            return jsonObj[i].text;
          }
          var t = traverse(jsonObj[i].children, val);
          if(t != null) return t;
        }
      }
      return null;
    }
      

  10.   

    alert(digui(data,37));
    function digui(data,id){
    var s="";
    for(var i in data){
    if(data[i]["id"]==id){

    s=  data[i]["text"];

    break;
    }
    if(s==null||s==''){
    if(data[i]["children"].length>0){

    s= digui(data[i]["children"],id);
    }

    }
    }
    return s;

    }
      

  11.   

    之前也这么测试过,结果少了个break。答案就变了。非常感谢。 
    我还有个帖子没人回答。问题自己解决了。没法结贴。
    麻烦你去这个帖子回复下拿分。
    再次感谢你的热心。