Javascript 为什么这种递归方法会在IE中出现?使用JSON
在使用以下代码时,它适用于除IE之外的所有浏览器,IE返回一个错误,指出“if(data[item].sub!==null)”行为null或未定义。我特意将JSON对象的sub属性设置为null,以便对此进行测试,并确保有一个值与该“sub”属性关联。所有版本中只有IE中断Javascript 为什么这种递归方法会在IE中出现?使用JSON,javascript,json,internet-explorer,recursion,Javascript,Json,Internet Explorer,Recursion,在使用以下代码时,它适用于除IE之外的所有浏览器,IE返回一个错误,指出“if(data[item].sub!==null)”行为null或未定义。我特意将JSON对象的sub属性设置为null,以便对此进行测试,并确保有一个值与该“sub”属性关联。所有版本中只有IE中断 createDropDownCode: function(arr){ // loop through li's of primary menu that
createDropDownCode: function(arr){
// loop through li's of primary menu
that.find("li").each(function(idx){
$(this).append( menusort(arr.menu[idx].sub) );
$('#PrimNav div.menu').hide();
function menusort(data){
if(data !== null)
var html = "<div class='menu'><ul>";
var data_count = 0;
for(item in data){
data.length-1 == data_count ? html += "<li class='last'>" : html += "<li>";
if(data[item].sub !== null){
if(typeof(data[item].sub) === 'object'){
html += "<a href='" + data[item].link + "'><span>" + data[item].name + "</span></a>";
if($.isArray(data[item].sub)){
html += menusort(data[item].sub);
}
}
}
html += "</li>"
data_count += 1;
}
if(data !== null)
html += "</ul></div>";
return html;
}
在JSON数据中,尝试使用
false
而不是null
,我认为对象类型比较有点过分
if(data[item].sub) {
html += "<a href='" + data[item].link + "'><span>" + data[item].name + "</span></a>";
if($.isArray(data[item].sub)) {
html += menusort(data[item].sub);
}
}
if(数据[项目].sub){
html+=“”;
if($.isArray(数据[项目].sub)){
html+=menusort(数据[项].sub);
}
}
编辑:好的,这不是答案。正如我在上面的评论中所说的,请将一个工作(或不工作)示例发布到。如果(数据===null)返回“”,为什么不写
代码>?这行做什么:data.length-1==数据\计数?html+=“”:html+=“ ”?Fabian,当我使用for…in循环时,我无法访问给定当前项的变量,因此必须包含一个计数器,以便我知道何时处于项循环的末尾,并向该项添加一个类“last”。@quinton我明白了,这是一种非常“黑客”的写入方式。乍一看,我不认为这是一个缩短的if语句。顺便问一下,我的回答对你有帮助吗?我刚刚有了另一个想法,你能给我发一个你的代码的工作示例吗?我找到了答案,非常简单而且很好,虽然IE的响应不是很好。我所需要做的就是确保我用“var”定义了“item”。所以for(数据中的项)变成for(数据中的var项)。此外,我还将在for循环中添加一个hasOwnProperty测试,以确保所有属性都属于该对象。感谢这一想法,但将子属性改为赋值为null,只需将for循环中的项变量设置为“for(数据中的var项)”,而忽略了“var”关键字。
if(data[item].sub) {
html += "<a href='" + data[item].link + "'><span>" + data[item].name + "</span></a>";
if($.isArray(data[item].sub)) {
html += menusort(data[item].sub);
}
}