Не могу понять, как получить доступ к элементам объекта, используя $ .each

0

Я ожидаю, что следующее будет предупреждать "game1", а затем "game2", но ничего не предупреждает

var pages = [{
    "menuMain": {
        "pageTitle": "game1",
        "leftButtonText": "back",
        "leftButtonHREF": "#mainPage",
        "rightButtonText": "Close",
        "rightButtonHREF": "#mainPage"
    },
    "subMenu": {
        "pageTitle": "game2",
        "leftButtonText": "back",
        "leftButtonHREF": "#mainPage",
        "rightButtonText": "Close",
        "rightButtonHREF": "#mainPage"
    }
}]

$.each(pages, function (id, page) {
    alert(page.pageTitle);
});

EDIT: обновлено, чтобы сделать вопрос более ясным

  • 2
    pages является массивом. Он содержит один элемент, объект. Этот объект имеет свойство menuMain .
Теги:

3 ответа

1

Вы повторяете pages которые являются массивом dict, попробуйте:

alert(page.menuMain.pageTitle);
  • 0
    Я не думаю, что это сработает. позвольте мне обновить вопрос
0

Параметр page в вашей функции обратного вызова является непосредственным членом массива, который в вашем случае: {"menuMain":{..}} object.

Поэтому вы должны сделать это так:

$.each(pages, function(id, page) {
    alert(page.menuMain.pageTitle);
});

редактировать

Если вы заранее не знаете свойства, это может быть правильный путь:

$.each(pages, function(id, page) {
    for(var pageSection in page) {
        if(page.hasOwnProperty(pageSection)) {

            //This block will loop for every 
            //top-level property in your members

            //This will alert "menuMain" or "subMenu"
            alert(pageSection);

            //This will alert "game1" or "game2"
            alert(page[pageSection].pageTitle);
        }
    }
});
  • 0
    Но я не буду знать, что mainMenu существует, поскольку он анализируется с удаленного сервера.
  • 0
    Есть ли у вас контроль над тем, как объект структурирован на сервере? Ты тоже пишешь на стороне сервера?
Показать ещё 1 комментарий
0

Проблема в том, что вы нажимаете только элемент верхнего уровня вашего объекта.

Измените следующим образом, и вы получите то, что ожидаете:

$.each(pages.menuMain, function(id, page) {
          alert(page.pageTitle);
        });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню