2010-06-03 4 views
1

J'ai une table:obtenir des valeurs de la table sous forme de paires de valeurs-clés avec jquery

<table class="datatable" id="hosprates"> 
       <caption> hospitalization rates test</caption> <thead> 
       <tr> 
        <th scope="col">Funding Source</th> <th scope="col">Alameda County</th> <th scope="col">California</th> 
       </tr> 
       </thead> 
       <tbody> 
        <tr> 
         <th scope="row">Medi-Cal</th> 
         <td>34.3</td> 
         <td>32.3</td> 
        </tr> 
        <tr> 
         <th scope="row">Private</th> 
         <td>32.2</td> 
         <td>34.2</td> 
        </tr> 
        <tr> 
         <th scope="row">Other</th> 
         <td>22.7</td> 
         <td>21.7</td> 
        </tr> 
       </tbody> 
      </table> 

je veux récupérer la colonne 1 et la colonne 2 valeurs par ligne sous forme de paires qui finissent par ressembler à ce [financement, nombre] , [financement, nombre]

Je l'ai fait jusqu'à présent, mais quand je l'alerter, il montre seulement [objet, objet] ...

var myfunding = $('#hosprates tbody tr').each(function(){ 
    var funding = new Object(); 

    funding.name = $('#hosprates tbody tr td:nth-child(1)').map(function() { 
       return $(this).text().match(/\S+/)[0]; 
      }).get(); 
    funding.value= $('#hosprates tbody tr td:nth-child(2)').map(function() { 
       return $(this).text().match(/\S+/)[0]; 
      }).get(); 

}); 
alert (myfunding); 

Répondre

2
var result = $('#hosprates tbody').children().map(function() { 
    var children = $(this).children(); 

    return { 
     name: children.eq(0).text(), 
     value: children.eq(1).text() 
    }; 
}).get(); 

Cela va construire un tableau sous la forme:

[ 
{ name : "...", value: "..." }, 
{ name : "...", value: "..." }, 
{ name : "...", value: "..." } 
] 

etc

Pour obtenir le nom de la première ligne, utilisez:

alert(result[0].name); 

Pour la valeur:

alert(result[0].value); 

Edit: si vous voulez que le résultat EXACTEMENT comme vous spécifiez:

var result = $('#hosprates tbody').children().map(function() { 
    var children = $(this).children(); 

    return "[" + children.eq(0).text() + "," + children.eq(1).text() + "]" 
}).get().join(","); 
+0

salut mat, merci beaucoup mpler .. mais j'ai besoin des résultats retournés formatés comme je l'ai décrit ci-dessus ... est-ce que je ferais alors chaque une fonction sur result.name et result.value pour formater chaque paire? ou sur le résultat? – liz

+0

@liz: Voir ma modifier :) – Matt

+0

+1 Nice work :) – Mottie

0

Essayez ceci alors (demo):

var funding = $('#hosprates tbody tr').map(function(){ 
    return [[ $(this).find('th').eq(0).text() , // find first and only <th> 
      $(this).find('td').eq(0).text() ]]; // find first <td> in the row 
    }).get(); 

    alert(funding); // Output: Medi-Cal,32.3,Private,34.2,Other,21.7 

L'affichage d'alerte ne montre que les données contenues dans le tableau, il est en fait formaté comme ceci:

[["Medi-Cal", "32.3"], ["Private", "34.2"], ["Other", "21.7"]] 

vous pouvez donc obtenir le Medi-Cal données comme ceci:

alert(funding[0][0] + ' -> ' + funding[0][1]); // output: Medi-Cal -> 34.3 
+0

merci, mais cela renvoie médical, 32,3, privé, 34,2, autre, 21,7 – liz

+0

désolé, il ne me laisse pas éditer ce commentaire qui est faux ... je vois maintenant vous dites que l'alerte ne me montre pas les données, mais la chose est J'ai besoin de saisir les valeurs de texte et les formater exactement comme mon exemple sans les guillemets ou les espaces supplémentaires. – liz

+0

désolé - je ne suis pas clair. J'ai beaucoup de ces paires non seulement 3, il semble qu'il devrait y avoir un moyen de produire les données exactement comme je veux automatiquement, sans appeler manuellement le financement [0] [0] etc ... il ne semble pas le plus efficace façon de le faire. – liz

Questions connexes