Avatar billede mortennorup Nybegynder
05. februar 2015 - 15:34

Pointers/hjælp til formatering af nestede arrays (jQuery, ajax, json)

Hej Eksperter,

Her følger en jQuery iteration over et knap så velformateret json response (kan jeg desværre ikke gøre noget ved):

  $(".getData").click(function() {
    cusId=$(this).attr('id');//get cusId from DOM
    var inputs = {};
    inputs.domain = $('#domain').val();//fra formen der henter data - ikke vigtigt her
    inputs.month = $('#month').val();//fra formen der henter data - ikke vigtigt her
    inputs.custid = cusId;//fra formen - skal bruges til at hente specifikt datasæt

    controller.Name().ajax({
      contentType: "application/json",
      processData: false,
      data: JSON.stringify(inputs),
      success: function(data) { //data fra response
        var tr;
        $.each(data, function(i, item) {//start iteration over arrays
        if(data[i].typeDetails != null) {
          var typeDetailsTEMP = data[i].typeDetails;
          for(var j=0; j<typeDetailsTEMP.length; j++) {
            if(typeDetailsTEMP[j].prodDetail != null) {
              var prodDetailTEMP = typeDetailsTEMP[j].prodDetail;
              for(var m=0; m<prodDetailTEMP.length; m++) {
                tr = $('<tr>');
                tr.append("<td>" + prodDetailTEMP[m].type + "</td><td>" + prodDetailTEMP[m].name + "</td><td>" + prodDetailTEMP[m].prodId + "</td>"); //hent værdierne op igennem arrays og append til tr
                if(prodDetailTEMP[m].intervalDetails != null) {
                  var intervalDetailsTEMP = prodDetailTEMP[m].intervalDetails;
                  for(var k=0; k<intervalDetailsTEMP.length; k++) {
                    tr.append("<td><p>Fra</p>" + intervalDetailsTEMP[k].from + "<p>Til</p>" + intervalDetailsTEMP[k].to + "</td>"); //append records til tr
                    $("tr[id^='setA_" + cusId + "']").after(tr); //tilføj tr's til den specifikke tr hvorfra click funktionen er kaldt
                  }
                }
              }
            }
          }
        }
      });
    }
  });
});

Stadig med?

Dette fungerer helt fint og smider data i nye <tr>'s EFTER <tr> med id der starter med setA_

Selve strukturen ser sådan ud:

<table>
  <tr id="setA_1"> <!--"1"-tallet her er variabel, tr'en er "hardkodet" i DOM'en-->
    <td><a href="#" id="1" class="getData">trigger click funktion</a></td>
    <td>Noget tekst</td>
  </tr>
  <tr> <!--Her er første række data fra .click funktionen-->
  <td>data</td>
  ...
  </tr>
  <tr> <!--Her er næste række data fra .click funktionen-->
  <td>data</td>
  ...osv
  </tr>
  <tr id="setA_2"> <!--"2"-tallet her er variabel, tr'en er "hardkodet" i DOM'en-->
    <td><a href="#" id="1" class="getData">trigger click funktion</a></td>
    <td>Noget tekst</td>
  </tr>
</table>

Dér hvor jeg nu går død, er at jeg helst vil have mine datarows "pakket" ind i en table eller et block element...hvad som helst egentlig.

Dvs. at DOM'en helst skulle se sådan ud efter .click:

<table>
  <tr id="setA_1">
    <td><a href="#" id="1" class="getData">trigger click funktion</a></td>
    <td>Noget tekst</td>
  </tr>
  <div> <!--whatever, det vigtigste er, at dette element pakker hele iterationen ind-->
  <table>
    <tr>
      <td>data</td>
      ...
    </tr>
    <tr>
      <td>data</td>
      ...osv
    </tr>
  </table>
  </div>
  <tr id="setA_2"> <!--"2"-tallet her er variabel, tr'en er "hardkodet" i DOM'en-->
    <td><a href="#" id="1" class="getData">trigger click funktion</a></td>
    <td>Noget tekst</td>
  </tr>
</table>

Håber dette giver bare en smule mening...kort sagt er mit problem, at få smidt et eller andet container element udenom outputtet fra iterationen (evt. direkte i DOM'en) - og så appende (eller whatever) data i dette.

Kickeren er bare, at elementet SKAL indsættes efter <tr id="getA_1/2/etc"> alt efter hvilken .click der triggers fra.

Har stirret mig blind på det - gode pointers og braining over det modtages med glæde.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester