在JS中解析形如JSON数据的对象数据的时候,采用的方法是用for循环遍历该对象,如果对象中还有对象,就可以先匹配第一层对象,找到需要的字符串值。如果==即将他PUSH入一个数据返回。

例如:

function getArr(id){
    var arr=[];
    for(var i=0;i<_side_menu_style[id];i++){   //用for循环解析数组
        if(_side_menu_arr[id][i].text.checked){  //在这里是如果checked(被选中)的话,即用push保存这个数组元素到被返回的数组。
            arr.push(i);
        }
    }
    return arr;    //当以后调用 getArr方法的时候,就会得到这个返回的数组。
}

上面这一段代码只是没有匹配字符串,仅仅是如果checked即返回这个值。

function getInterfaceMenuZiId(id,arr){
    var newArr=[];
    for(var i=0;i<setProductMenu._data.length;i++){
        if(i==id){
            for(var k=0;k<setProductMenu._data[i].info.length;k++){
                for(var j=0;j<arr.length;j++){
                    if(k==arr[j]){
                        newArr.push(setProductMenu._data[i].info[k].id);
                    }
                }
            }
        }
    }
    
    return newArr;
}

上面这段是更复杂的查询。

 

它解析的是这样的数据:

var product_menu_data={"code":0,"message":"success","data":[{"name":"COMPETITIN 竞技","id":"COMPETITIN","info":[{"name":"-男性",id:0},{"name":"-女性",id:0}]},{"name":"FITNESS 运动","id":"FITNESS","info":[{"name":"-男性",id:0},{"name":"-女性",id:0}]},{"name":"LEISURE  休闲","id":"LEISURE","info":[{"name":"-男性",id:0},{"name":"-女性",id:0}]},{"name":"JUNIOR 儿童","id":"JUNIOR","info":[{"name":"-男性",id:0},{"name":"-女性",id:0}]},{"name":"OTHER  其他","id":"OTHER","info":[{"name":"-泳镜",id:0},{"name":"-泳帽",id:0},{"name":"-泳包",id:0},{"name":"-其他",id:0}]},{"name":"CATALOG 商品目录","id":"CATALOG","info":[]}]};

而只要调用这些返回数组的方法,即得到这些数据,例如:

div.onclick=function (e){
            var e = window.event || e;
            var srcElement = e.srcElement || e.target;    
            var id=srcElement.parentNode.id.split("_")[1];
            if(!_menu_click) return;
            if(_f_Id!=id){
                _f_Id=id;
                blockThumbnails(id);
                getMenuStyle(_f_Id);
                sideMenuStatus(_f_Id,getArr(_f_Id));
                productListInterface(_f_Id);
            }
        }

上面有一个方法sideMenuStatus()中的第二个参数是从getArr()方法得到的,它传的参数 _f_Id 也正是需要查询的键值。

function sideMenuStatus(id,arr){
    for(var i=0;i<_side_menu_arr.length;i++){
        for(j=0;j<_side_menu_arr[i].length;j++){
            if(i==id){
                for(k=0;k<arr.length;k++){
                    if(j==arr[k]){
                        if(_side_menu_arr[i][j].text.checked){
                            _side_menu_arr[i][j].bg.style.opacity=1;
                            _side_menu_arr[i][j].bg.style.filter="alpha(opacity=100)";
                            _side_menu_arr[i][j].text.style.color="#0070bd";
                            _side_menu_arr[i][j].text.checked=true;
                        }else{
                            //_side_menu_arr[i][j].bg.style.display="none";
                            _side_menu_arr[i][j].bg.style.opacity=0;
                            _side_menu_arr[i][j].bg.style.filter="alpha(opacity=0)";
                            _side_menu_arr[i][j].text.style.color="#ffffff";
                            _side_menu_arr[i][j].text.checked=false;
                        }
                    }
                }
            }else{
                //_side_menu_arr[i][j].bg.style.display="none";
                _side_menu_arr[i][j].bg.style.opacity=0;
                _side_menu_arr[i][j].bg.style.filter="alpha(opacity=0)";
                _side_menu_arr[i][j].text.style.color="#ffffff";
                _side_menu_arr[i][j].text.checked=false;
            }
        }
    }
}

sideMenuStatus()便是最终这些查询结果数组的归宿。

查找结果重组成的新数组将会被再次解析发挥它真正的作用。

posted on 2013-11-13 11:11  meeming  阅读(303)  评论(0)    收藏  举报



Fork me on GitHub