2012-12-11 8 views
0

루프에서 객체를 추가 할 때 올바른 형식으로 객체를 만드는 데 문제가 있습니다.루프에서 객체 만들기

일부 목록

<ul class="pdmenu"> 
    <ul class="pdmenu"> 
    <li class="menu-top" id="vmen-1"><a href="#">1</a></li> 
    <li class="menu-item"><a href="#">aaa</a></li> 
</ul> 

<ul class="pdmenu"> 
    <li class="menu-top" id="vmen-2"><a href="#">2</a></li> 
    <li class="menu-item"><a href="#">aaa</a></li> 
    <li class="menu-item"><a href="#">bbb</a></li> 
</ul> 

<ul class="pdmenu"> 
    <li class="menu-top" id="vmen-3"><a href="#">3</a></li> 
    <li class="menu-item"><a href="#">aaa</a></li> 
    <li class="menu-item"><a href="#">bbb</a></li> 
</ul> 

내가 상위 목록 항목, .menu-top을 통해 루프 jQuery를 사용하여 객체에 id 및 가시성을 밀어

통해 내가 루프. 이것은 내가 필요한 것은 다음과 같은 간단한 형식은 너무

{ 
    "0": { 
     "menu":"vmen-1", 
     "visible":"false" 
    }, 
    "length":4, 
    "1": { 
     "menu":"vmen-2", 
     "visible":"false" 
    }, 
    "2":{ 
     "menu":"vmen-3", 
     "visible":"false" 
    }, 
    "3": { 
     "menu":"vmen-4", 
     "visible":"true" 
    } 
} 

등의 각 항목에 대해 구성원으로 객체를 생성

jsonmenu = $(); // Set empty object. 

$('.menu-top').each(function(index) {     
    jsonmenu.push({ 
     menu: $(this).attr('id'), 
     visible: "" + $(this).next().is(':visible') + "" 
    }); 
}); 

;

{ 
    "menu":"vmen-1", 
    "visible":"false" 
}, 
{ 
    "menu":"vmen-2", 
    "visible":"false" 
}, 
{ 
    "menu":"vmen-3", 
    "visible":"false" 
}, 
{ 
    "menu":"vmen-4", 
    "visible":"true" 
} 

이 간단한 형식으로 개체를 가져 오려면 어떻게 변경해야합니까?

+1

jsonmenu = $() 대신 jsonmenu = [] – closure

+0

FYI는 '객체'입니다. json과 아무 관련이 없습니다. 혼란을 막기 위해 용어를 약간 수정했습니다. –

+0

'$()'는 jQuery 인스턴스를 생성하고 직렬화하기에 절대적으로 적합하지 않습니다. 왜 그것을 사용 했습니까? – Bergi

답변

1

당신의 값을 유지하기 위해 기본 배열이 아닌 JSON 객체를 사용 :이처럼 할 수있는, 당신은 단지 키 - 값 쌍 같은 것을 가지고로,

var jsonmenu = []; 

$('.menu-top').each(function(index) {     
    jsonmenu.push({menu: $(this).attr('id'), visible: ""+$(this).next().is(':visible')}); 
}); 

또는를 :

var jsonmenu = {}; 

$('.menu-top').each(function(index) {     
    jsonmenu[ $(this).attr('id') ] = $(this).next().is(':visible'); 
}); 
이미 대답 했어
{ 
    'vmen-1': false, 
    'vmen-2': false, 
    ... 
} 
0

가 아니라 기본 배열을 사용하기 위해이 같은 초래

빈 jQuery 객체보다

var jsonmenu = $('.menu-top').map(function(i,e) {     
    var $this = $(e); 
    return { 
     id: $this.attr('id'), 
     visible: "" + $this.next().is(':visible') + "" 
    } 
}); 

라이브 : 그러나, 완성도, "DOM 요소의 무리를 열거하고 배열로 만들어 놓을".map()

당신은 너무처럼 사용하는 것 같은 일을하는 jQuery를 또 다른 편리한 방법이있다 예 : http://jsfiddle.net/8szrG/

+0

감사합니다. 이것도 정말 유용합니다. – Sam