2013-08-28 4 views
1

Итак, я пытаюсь изучить javascript, и я думаю, что у меня есть рабочий скрипт json с циклом для захвата данных, но мне трудно понять, как добавить данные в мой div , После того, как я это выясню, я переделаю его в jquery (потому что я тоже пытаюсь это узнать).Append for loop to div in html

Допустим, мой ДИВ идентификатор #wrapper

for (var i = 0; i < providerlisting.length; i++) { 
document.write('<div class="entry panel row"> \ 
    <div class="large-4 columns first"> \ 
      <div class="name">' + providerlisting[i].nametitle + '</div> \ 
      <div class="specialty">' + providerlisting[i].caretype + '</div> \ 
      <div class="peferred">' + providerlisting[i].preferredprovider + '</div> \ 
     </div> \ 
     <div class="large-3 columns second"> \ 
      <div class="address">' + providerlisting[i].address1 + '<br /> \ 
      ' + providerlisting[i].address2 + '<br /> \ 
      ' + providerlisting[i].citystatezip + ' \ 
      </div> \ 
     </div> \ 
     <div class="large-3 columns third"> \ 
      <img src="' + providerlisting[i].coverage + '" alt="example"> \ 
     </div> \ 
     <div class="large-2 columns fourth"> \ 
      <div class="status">' + providerlisting.status + '</div> \ 
      <a data-dropdown="actionsMenu2" class="actions button small secondary round dropdown" href="#">Actions</a><br> \ 
      <ul id="actionsMenu2" data-dropdown-content="" class="f-dropdown"> \ 
       <li><a href="' + providerlisting[i].psn + '">Generate PSN</a></li> \ 
       <li><a href="' + providerlisting[i].dcontact + '">Download Contact</a></li> \ 
       <li><a href="' + providerlisting[i].save + '">Save to Provider List</a></li> \ 
       <li><a href="' + providerlisting[i].rating + '">View Healthgrades Rating</a></li> \ 
      </ul> \ 
     </div> \ 
    </div> \ 
')}; 
+0

Смотрите этот ответ: http://stackoverflow.com/a/5677816/467133 Удачи вам в обучении jQuery! –

+0

Моим советом было бы удалить все и начать все заново, так как это беспорядок! Избегайте использования document.write и длинных строк HTML. – adeneo

+1

Adeneo, я пытаюсь изучить javascript. Пожалуйста, постарайтесь быть конструктивными в будущем. – Chad

ответ

4

Не используйте document.write, это прямой выход (где когда-либо <script> может лежать). И, не вдаваясь в объекты DOM, вам нужно будет добавить .innerHTML. например

var wrapper = document.getElementById('wrapper'); 

for (...){ 
    /*document.write(*/ 
    wrapper.innerHTML += 
    '<div ...' 
    ; 
    /*);*/ 
} 

Теперь вы могли начать использовать DOM элементов вместо этого. например:

var wrapper = document.getElementById('wrapper'); 

for (...){ 
    // create the outer div (with classes 'entry panel row'): 
    var entry_panel_row = document.createElement('div'); 

    // add the class names: 
    entry_panel_row.className = 'entry panel row'; 

    // instead of document.write, add the HTML to this new element... 
    entry_panel_row.innerHTML += '<div class="large-4 ...</div>'; 

    // now append the element (as a whole) to wrapper 
    wrapper.appendChild(entry_panel_row); 
} 

Идя дальше, вместо того, чтобы использовать строки, вы можете создать элементы по одному, добавить свои их каждому из родителей. Затем, как только вы скомпилируете весь элемент DOM в entry_panel_row, вы можете перейти к wrapper.appendChild(entry_panel_row).


JQuery есть (немного) легче, чем el = document.createElement и parent.appendChild(el) снова и снова, и номенклатура занимает немного привыкнуть, но вот то, что у вас было. Я полагаю, что я бы перевести его, так что вы можете увидеть JQuery (вы упоминали его изучение):

for (var i = 0; i < providerlisting.length; i++){ 
    var pl = providerlisting[i]; // shorthand reference 

    // begin building you DOM element 
    $('<div>') 
    .addClass('entry panel row') // css classes 
    .append(// children 
     $('<div>').addClass('large-4 columns first').append(
     $('<div>').addClass('name').text(pl.nametitle), 
     $('<div>').addClass('specialty').text(pl.caretype), 
     $('<div>').addClass('preferred').text(pl.preferredprovider) 
    ), 
     $('<div>').addClass('large-3 columns second').append(
     $('<div>').addClass('address').html(pl.address1 + '<br />' + pl.address2 + '<br />' + pl.citystatezip) 
    ), 
     $('<div>').addClass('large-3 columns third').append(
     $('<img>').attr({'src':pl.coverage,'alt':'example'}) 
    ), 
     $('<div>').addClass('large-2 columns fourth').append(
     $('<div>').addClass('status').text(pl.status), 
     $('<a>').addClass('actions button small secondary round dropdown').prop('href','#').data('dropdown','actionsMenu2').text('Actions'), 
     '<br />', 
     $('<ul>').prop('id','actionsMenu2').addClass('f-dropdown').data('dropdownContent','').append(
      $('<li>').append(
      $('<a>').prop('href',pl.psn).text('Generate PSN') 
     ), 
      $('<li>').append(
      $('<a>').prop('href',pl.dcontact).text('Download Contact') 
     ), 
      $('<li>').append(
      $('<a>').prop('href',pl.save).text('Save to Provider List') 
     ), 
      $('<li>').append(
      $('<a>').prop('href',pl.rating).text('View Healthgrades Rating') 
     ), 
     ) 
    ) 
    ) 
    .appendTo('#wrapper'); // add it to #wrapper 
} 
+0

@Chad: Обновлена ​​версия jQuery (для вашего удовольствия). Счастливое кодирование. –

+0

Спасибо, Брэд, я использовал DOM, настроенный вами выше, и, пока код проверяется в моей среде IDE, он не добавляет ничего к обертке div. Я включил скрипт извне в тег заголовка, а не встроенный. Я вижу, что правильный скрипт загружен, но ничего не отображается. Есть идеи? – Chad

+0

@Chad: В ''? Скорее всего, JavaScript еще не знает элемент, называемый '# wrapper' [когда вы читаете jQuery, это основная причина, по которой все находится в событии готовности документа]. Если это не Modernizr, все '

0

Вы можете использовать

document.getElementById('wrapper').innerHtml = document.getElementById('wrapper').innerHtml + 'new content';