Перемещение по клику через определенные узлы 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]);
}
}
}
Если у вас есть несколько объектов типа, которые вы указали в демонстрационном коде, вы можете использовать объект размерного массива или около того.
Вы также можете проверить демо на этой скрипке
Запросы приветствуются!