2011-12-25 4 views
1

У меня есть следующий сценарий:JQuery JSON вложенные циклы

function drawDimensions(divid) { 
    $.getJSON('dimensions.json', function(data) { 
     $.each(data, function(index) { 
      var ppp = $('#' + divid).append("<div class='dTitle'><img src='images/cleardot.gif' />" + index + "</div><br>"); 
      $.each(this, function(k, v) { 
       $('<div>').append(v).appendTo(ppp); 
      }); 
     }); 
    }); 
} 
drawDimensions('dim'); 

Я пытаюсь гнездо дивы поэтому значения из первого контура будут родители дивы на втором цикле.

Что я делаю неправильно? вторые дивы петли не вложены в первом, а просто добавляются после первых ..

ответ

1

Вашего ppp на самом деле ссылка на $('#' + divid), а не к вновь созданному (внешнему) div.

Попробуйте это:

var ppp = $("<div class='dTitle'><img src='images/cleardot.gif' />" + index + "</div><br>"); 
ppp.appendTo('#' + divid); 
+0

Отлично, спасибо за это. – user838437

2

одной очевидную ошибку (не может быть единственным) является то, что ppp будет по-прежнему относятся к родительским DIV, а не тот, который вы создали там.

использование appendTo(), как вы делаете во внутреннем цикле, или назначение отдельного, как:

function drawDimensions(divid) { 
    var $container = $('#' + divid); 
    $.getJSON('dimensions.json', function(data) { 
     $.each(data, function(index) { 
      var ppp = $("<div class='dTitle'><img src='images/cleardot.gif' />" + index + "</div><br>"); 
      $container.append(ppp); // or ppp.appendTo($container); 
      $.each(this, function(k, v) { 
       $('<div>').append(v).appendTo(ppp); 
      }); 
     }); 
    }); 
} 
drawDimensions('dim'); 

Try и посмотреть, как она идет, и скажите мне в комментариях.

Заметки о примере кода:

  • Я кэшируются получение контейнера Div объект JQuery, так как есть только один все равно
  • Кроме того, используется в качестве префикса $ к переменной я использовал. Просто обычная практика с объектами jQuery, не требуется.
+1

+1 для продвижения передового опыта. – PPvG

Смежные вопросы