运行没问题。但是改成接受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); }
}
}
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;
}
感谢回复。 试了下,即使使用arguments.callee调用自身。控制台依旧输出 c null 而不是想要的 c c
首先非常感谢你的热心回复。你使用的是第2级的children Id 如果换成第3级。又获取不到了。 我帖子的那个代码也有这个问题。如果不是19 而是2级分类的ID,也正常返回。 但是使用3级ID就返回NULL。
首先非常感谢你的热心回复。你使用的是第2级的children Id 如果换成第3级。又获取不到了。 我帖子的那个代码也有这个问题。如果不是19 而是2级分类的ID,也正常返回。 但是使用3级ID就返回NULL。 原因是递归的时候找到值后,递归没有结束 。
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));
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; }
alert(digui(data,37)); function digui(data,id){ var s=""; for(var i in data){ if(data[i]["id"]==id){
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);
}
}
}
改成arguments.callee(jsonObj[i], val)
试试看
运行没问题。但是改成接受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);
}
}
}
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;
}
试了下,即使使用arguments.callee调用自身。控制台依旧输出
c
null
而不是想要的
c
c
我帖子的那个代码也有这个问题。如果不是19 而是2级分类的ID,也正常返回。
但是使用3级ID就返回NULL。
我帖子的那个代码也有这个问题。如果不是19 而是2级分类的ID,也正常返回。
但是使用3级ID就返回NULL。
原因是递归的时候找到值后,递归没有结束 。
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));
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;
}
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;
}
我还有个帖子没人回答。问题自己解决了。没法结贴。
麻烦你去这个帖子回复下拿分。
再次感谢你的热心。