在自己项目中遇到问题,思考之后想着记录下来。
后台返回的数据格式为results.list:[{"declare/check":"1","declare":"1"}];
var data = results.list;
var arr=[];
var dataNum= data[0];
通过下面的for把数据变为arr=[{id:"declare/check",num:1},{id:"declare",num:1}]
for(var i in dataNum){
var json={};
json.id=i;
json.num=dataNum[i];
arr.push(json);
}
遍历左侧菜单当左侧菜单的key与后台传的key值相同则再左侧菜单显示添加的数量
当时有个问题就是当审批完这条数据后(也就是num=0时后台就不返回这个key和数量)
我写的each和for遍历为下面
$("#side-menu ul li a[datakey]").each(function(){
if(arr.length!=0){
for(var i=0;i<arr.length;i++){
var jsonnum=arr[i];
if(jsonnum.id== $(this).attr("datakey")){
$(this).children("b").html(" ("+jsonnum.num+")");
}
}
}else{
$(this).children("b").html("");
}
});
开始没有加break而且在if下面没有else的时候是显示正常的,
出现的问题是当审批完成后这条数据的key和num没有返回来,
则数量还是存在左侧菜单中。(当时是写了个定时器来监控左侧数量的,但是除非刷新后才行)
修改之后
$("#side-menu ul li a[datakey]").each(function(){
if(arr.length!=0){
for(var i=0;i<arr.length;i++){
var jsonnum=arr[i];
if(jsonnum.id== $(this).attr("datakey")){
$(this).children("b").html(" ("+jsonnum.num+")");
break;//没有加这个break则左侧菜单全部不显示 添加后则跳出整个循环 而且提高效率
}else{
$(this).children("b").html("");
}
}
}else{
$(this).children("b").html("");
}
});
后来后台改为数量为0的时候也传进来results.list:[{"declare/check":"1","purchase/purchaseCheck":"0","purchase":"0","declare":"1"}];
$("#side-menu ul li a[datakey]").each(function(){
if(arr.length!=0){
for(var i=0;i<arr.length;i++){
var jsonnum=arr[i];
if($.trim(jsonnum.id)== $.trim($(this).attr("datakey"))){
jsonnum.num!=0?$(this).children("b").html(" ("+jsonnum.num+")"):$(this).children("b").html("");//此处代码修改后完美解决
}
}
}else{
$(this).children("b").html("");
}
});
经过这个写法对each 和 for break一起使用有了很好的理解 之前使用的时候经常犯迷糊。菜鸟记录。。。