在自己项目中遇到问题,思考之后想着记录下来。

后台返回的数据格式为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一起使用有了很好的理解 之前使用的时候经常犯迷糊。菜鸟记录。。。

posted on 2018-04-14 18:00  努力才会进步  阅读(447)  评论(0编辑  收藏  举报