Использование счетчика на $ .each Jquery - PullRequest
0 голосов
/ 03 марта 2012

У меня проблемы с использованием счетчика с $ .each. Я получаю фид JSON, а затем хочу вычеркнуть «заголовок» результатов.Если я использую число, то это работает, но когда я пытаюсь использовать счетчик 'т.е. var i = 1', это не работает.Я думаю, что это связано с тем, что переменная не передана в функцию правильно?

Спасибо

  var i = 1;

  $.getJSON("http://www.aaronlumsden.com/api/?json=get_category_posts&slug=portfolio",function(data) {

   $.each(data, function(i) {
                    $('#navScroller').append('<li><a rel=""href="" title="">'+data.posts[i].title+'</a></li>');
                    i++;
                });
 });

Ответы [ 4 ]

4 голосов
/ 03 марта 2012

Даже при устранении проблемы с тенью, я не думаю, что ваш код будет работать так, как ожидалось.

data - это объект, а $.each() [документы] повторяется для каждого свойства объекта. Пока я вижу, что у него есть 5 свойств (здесь как JSON):

{
    "status":"ok",
    "count":8,
    "pages":1,
    "category":{...},
    "posts": [...]
}

Если это единственные, $.each() будет перезванивать пять раз, что означает, что вы получите заголовок первых пяти постов. Или, если сообщений меньше 5, вы получите сообщение об ошибке.

Я думаю, что вы действительно хотите перебрать все сообщений из ответа, который будет:

var $scroller = $('#navScroller');
$.each(data.posts, function(i, post) {
    $scroller.append('<li><a rel=""href="" title="">'+post.title+'</a></li>');
});

Если у вас много постов, имеет смысл заранее создать полную строку HTML и вызывать только .append() один раз , например:

$('#navScroller').append($.map(data.posts, function(post) {
    return '<li><a rel=""href="" title="">'+post.title+'</a></li>';
}).join('')); // not sure if you actually need `.join`
2 голосов
/ 03 марта 2012
var k = 1;

  $.getJSON("http://www.aaronlumsden.com/api/?json=get_category_posts&slug=portfolio",function(data) {

   $.each(data, function(i) {
     $('#navScroller').append('<li><a rel=""href="" title="">'+data.posts[i].title+'</a></li>');
     k++;
   });
   // Use k here
 });
0 голосов
/ 03 марта 2012
var k = 1;

  $.getJSON("http://www.aaronlumsden.com/api/?json=get_category_posts&slug=portfolio",function(data) {

   $.each(data.posts, function(i) {
     $('.nav').append('<li><a rel=""href="" title="">'+data.posts[i].title+'</a></li>');
     k++;
   });
   // Use k here
 });

Я пытался на этом сайте.Работает

0 голосов
/ 03 марта 2012

В each -функции. Вы объявляете параметр i. Это переопределяет var i = 1, который находится на первой строке. Удалите i в function(i), и я думаю, что все будет в порядке.

...