Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16

    Recuperare dati da un cella

    Salve a tutti!

    Sono alle prime armi con Javascript e da autodidatta ho un problema.
    Dato una tabella così composta:

    codice:
    <table><th>Provincia</th>
    <th>Residenti</th>
    <th>%Italia</th>
    <th>Superficie (kmq)</th>
    <th>Densità per kmq</th>
    <th>Num. Comuni</th>
    <th>Sigla</th>
    </tr> <tr><td>Bergamo</td><td>1.094.062</td><td>1,8%</td><td>2.723</td><td>401,8</td><td> 244</td><td>BG</td></tr> <tr><td>Brescia</td><td>1.247.192</td><td>2,1%</td><td>4.784</td><td>260,7</td><td>2 06</td><td>BS</td></tr> <tr><td>Como</td><td>592.504</td><td>1,0%</td><td>1.288</td><td>460,0</td><td>160</t d><td>CO</td></tr> <tr><td>Cremona</td><td>361.812</td><td>0,6%</td><td>1.771</td><td>204,3</td><td>115 </td><td>CR</td></tr> <tr><td>Lecco</td><td>338.425</td><td>0,6%</td><td>816</td><td>414,7</td><td>90</td> <td>LC</td></tr> <tr><td>Lodi</td><td>225.798</td><td>0,4%</td><td>782</td><td>288,7</td><td>61</td><td>LO</td></tr> <tr><td>Mantova</td><td>411.335</td><td>0,7%</td><td>2.339</td><td>175,9</td><td>70</td><td>MN</td></tr> <tr><td>Milano</td><td>3.075.083</td><td>5,2%</td><td>1.579</td><td>1.947,6</td><td> 134</td><td>MI</td></tr>
    <tr><td>Monza e della Brianza</td><td>850.684</td><td>1,4%</td><td>405</td><td>2.097,9</td><td>55</td><td >MB</td></tr> <tr><td>Pavia</td><td>539.569</td><td>0,9%</td><td>2.965</td><td>182,0</td><td>190</ td><td>PV</td></tr> <tr><td>Sondrio</td><td>181.101</td><td>0,3%</td><td>3.212</td><td>56,4</td><td>78</ td><td>SO</td></tr> <tr><td>Varese</td><td>876.960</td><td>1,5%</td><td>1.199</td><td>731,6</td><td>141</td><td>VA</td></tr> <tr><td>Totale</td><td></td><td></td><td></td><td></td><td></td><td></td></tr> </table>
    </table>
    e dovrei sommare i dati di ogni colonna e scriverli nella riga totale. Il problema è che non riesco a recuperare i dati di ogni cella. Sapreste aiutarmi? Questo è il codice che utilizzo

    codice:
     var a = document.getElementsByClassName("TD").rows[0].cells[0].innerHTML;
    Grazie!

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Ciao, il titolo "Recuperare dati da un cella" mi pare non identifichi il reale problema. Infatti il problema non è quello di recuperare i dati dalle varie celle (che si può fare facilmente con qualche ciclo messo in croce) ma il fatto di avere dei dati con vari formati non esattamente numerici, per cui bisogna convertirli opportunamente per poterli poi sommare assieme.

    Si tratta quindi di recuperare i valori, interpretarli e convertirli in numero per poterli quindi sommarli e, presumibilmente, riconvertirli nel relativo formato col quale sono già rappresentati sulla tabella. Giusto?

    Bisogna capire se ti serve una cosa ad hoc, solo per questa tabella o comunque per tabelle con la stessa struttura, o se invece ti serve qualcosa di più riusabile, che puoi adoperare in altre situazioni simili ma magari con altri campi e dati con diversi altri formati. In quest'ultimo caso il tutto è un po' più complesso da organizzare.

    Provo comunque a darti una soluzione che è una via di mezzo, poi vedi tu che fare.
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
      </head>
      <body>
        
            <table id="tuatabella" border=1>
                <tr><th>Provincia</th>                        <th>Residenti</th>    <th>%Italia</th>    <th>Superficie (kmq)</th>    <th>Densità per kmq</th>    <th>Num. Comuni</th>    <th>Sigla</th></tr> 
                <tr><td>Bergamo</td>                            <td>1.094.062</td>    <td>1,8%</td>            <td>2.723</td>                        <td>401,8</td>                        <td>244</td>                    <td>BG</td></tr>
                <tr><td>Brescia</td>                            <td>1.247.192</td>    <td>2,1%</td>            <td>4.784</td>                        <td>260,7</td>                        <td>206</td>                    <td>BS</td></tr>
                <tr><td>Como</td>                                    <td>592.504</td>        <td>1,0%</td>            <td>1.288</td>                        <td>460,0</td>                        <td>160</td>                    <td>CO</td></tr>
                <tr><td>Cremona</td>                            <td>361.812</td>        <td>0,6%</td>            <td>1.771</td>                        <td>204,3</td>                        <td>115</td>                    <td>CR</td></tr>
                <tr><td>Lecco</td>                                <td>338.425</td>        <td>0,6%</td>            <td>816</td>                            <td>414,7</td>                        <td>90</td>                        <td>LC</td></tr>
                <tr><td>Lodi</td>                                    <td>225.798</td>        <td>0,4%</td>            <td>782</td>                            <td>288,7</td>                        <td>61</td>                        <td>LO</td></tr>
                <tr><td>Mantova</td>                            <td>411.335</td>        <td>0,7%</td>            <td>2.339</td>                        <td>175,9</td>                        <td>70</td>                        <td>MN</td></tr>
                <tr><td>Milano</td>                                <td>3.075.083</td>    <td>5,2%</td>            <td>1.579</td>                        <td>1.947,6</td>                    <td>134</td>                    <td>MI</td></tr>
                <tr><td>Monza e della Brianza</td><td>850.684</td>        <td>1,4%</td>            <td>405</td>                            <td>2.097,9</td>                    <td>55</td>                        <td>MB</td></tr>
                <tr><td>Pavia</td>                                <td>539.569</td>        <td>0,9%</td>            <td>2.965</td>                        <td>182,0</td>                        <td>190</td>                    <td>PV</td></tr>
                <tr><td>Sondrio</td>                            <td>181.101</td>        <td>0,3%</td>            <td>3.212</td>                        <td>56,4</td>                            <td>78</td>                        <td>SO</td></tr>
                <tr><td>Varese</td>                                <td>876.960</td>        <td>1,5%</td>            <td>1.199</td>                        <td>731,6</td>                        <td>141</td>                    <td>VA</td></tr>
                <tr><td>Totale</td>                                <td></td>                        <td></td>                    <td></td>                                    <td></td>                                    <td></td>                            <td></td></tr>
            </table>
            
        <script type="text/javascript">
                function scriviTotali(e){
                    var t = document.getElementById(e)
                        , cc = t.rows[0].cells.length-1
                        , rr
                        ,    tot
                    ;
                    while (--cc){
                        tot = 0;
                        rr = 0
                        while(++rr<t.rows.length-1){
                            tot += formattaNumero(t.rows[rr].cells[cc].innerText, 0);
                        }
                        t.rows[rr].cells[cc].innerText = formattaNumero(tot,[1,3,1,2,1][cc-1]);
                    }
                }
                function formattaNumero(val,format){ // formatta un numero in base ad una formattazione predefinita e lo restituisce
                    // format:
                    //        0 - standard (123456.78)
                    //        1 - intero con separatore migliaia (1.234.567)
                    //        2 - una cifra decimale con separatore migliaia (1.234.567,8)
                    //        3 - una cifra decimale con simbolo percentuale (12,3%)
                    //
                    val = isNaN(val) ? +(val.replace(/[^\d,]/g,'').replace(/,/g,'.')) : +val;
                    switch (format){
                        case 1: val = Math.round(val).toLocaleString('de-DE'); break;
                        case 2: val = val.toFixed(1).toLocaleString('de-DE'); break;
                        case 3: val = val.toFixed(1).toLocaleString('de-DE')+'%'; break;
                    }
                    return val;
                }
                scriviTotali("tuatabella")
            </script>
      </body>
    </html>
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.