Перемещение по клику через определенные узлы JSON

Так что у меня есть модал. что когда срабатывает выборка. 1 файл JSON. JSON имеет несколько узлов; тем не менее, я просто хочу нацелиться на последние 4 узла и опустить что-либо перед ним. Название этих узлов: post_a, post_b, post_c, post_d. Они всегда будут последними 4 узлами в массиве. Это лучшая логика, которую я могу придумать:c

Я нахожусь в самом последнем взаимодействии моего портфеля, и я так озадачен тем, как пройти только через эти 4 узла. Я понимаю, что это будет логика Wonkey, и я в порядке с этим. Я довольно далеко в кроличьей норе и сейчас, и я просто хочу, чтобы это сработало.:(

Пример файла JSON:

{
  created_at: "2013-07-15T05:58:25Z", 
  id: 21, 
  name: "Skatelocal.ly",
  svg: "<svg> ... </svg>",
  post_a: "This is an awesome post 1", 
  post_b: "This is an awesome post 2", 
  post_c: "this is an awesome post 3", 
  post_d: "this is an awesome post 4"
}

Вот триггеры, а также JSfiddle того, как он должен проходить:

JSFIDDLES


postInModal = function(data, status) {

  $(".next").on({
    click: function() {
    //jsfiddles has working interaction dont want to cludder  
    $(".modal-main").hide().html(data.post_X).fadeIn()
    }
  });
  return $(".prev").on({
    click: function() {
    //jsfiddles has working interaction dont want to cludder
    $(".modal-main").hide().html(data.post_X).fadeIn()
    }
  });
};
return popProject = function(x) {
  return $.ajax({
    type: "GET",
    url: "/works/" + x + ".json",
    success: postInModal
  });

2 ответа

Решение

Что-то вроде этого?

var keys = [ 'post_a', 'post_b', 'post_c', 'post_d' ];
$.each(keys, function(i, key) {
  var val = yourJsonObject[key];
  // do something with val ..  
});

Чтобы нарисовать каждое значение одно за другим:

var keys = [ 'post_a', 'post_b', 'post_c', 'post_d' ];
var index = 0;

function getNext() {
  if (index < keys.length) {
    var key = keys[index++];
    var val = yourJsonObject[key];
    return val;
  }
  return null;
}

В вашем обработчике кликов попробуйте

var val = getNext();
if (val != null) {
  // do something with value
} else {
  // we haven gotten everything already
  // do nothing or reset index to start again or whatever
}

Вы можете попробовать с этой логикой, пройти через объект JSON, чтобы найти значение значений post_*, вставить в объект массива. Теперь этот объект массива можно использовать для итерации, когда .next или же .prev кнопки нажимаются

Код обхода как ниже

       function js_traverse(o) {
            var type = typeof o;
            if (type == "object") {
                for (var key in o) {
                    if (key.indexOf("post_") >= 0)
                        print(o[key]);                        
                }
            } 
        }

Если у вас есть несколько объектов типа, которые вы указали в демонстрационном коде, вы можете использовать объект размерного массива или около того.

Вы также можете проверить демо на этой скрипке

Запросы приветствуются!

Другие вопросы по тегам