2010-12-15 2 views
0

Hier ist meine Funktion:Schleife Hilfe nötig Tisch für das Bauen mit Javascript

function CreateResultsTable(bps, incs) { 
    var table = document.createElement('table'); 
    var str = '<table border=1>'; 
    str += '<tr><th></th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th></tr>'; 

    var i = 0; 

    // up 
    for (i = 0; i < incs; i++) { 
     var num = (incs - i) * bps; 
     var newStr = num.toString(); 
     str += '<tr><th>' + newStr + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>'; 
    } 
    i = 0; 

    //down 
    for (i = incs; i > 0; i--) { 
     var num = (incs - i) * bps; 
     var newStr = '-' + num.toString(); 
     str += '<tr><th>' + newStr + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>'; 
    } 
    return str; 
} 

Was ich will, ist, sage ich in {bps = 25, incs = 4} passieren. Es sollte immer die doppelte Menge an Zeilen (unter der Kopfzeile) von incs erstellen. Also für Incs = 4 und bps = 25, sollte es Zeilen mit ersten td = 100, 75, 50, 25, -25, -50, -75, -100 erstellen - in dieser Reihenfolge.

Was es jetzt macht, ist sie zu erstellen wie 100, 75, 50, 25, -0, -25, -50 - und das ist es.

Was mache ich falsch?

+0

aussehen, vergessen Sie nicht, Ihr 'table' Element zu schließen. – jball

+0

Versuchen Sie nicht, das Innere von Tabellen mit Strings zu erstellen. Verwenden Sie createElement und Freunde. IE mag es wirklich nicht, die innereHTML von Bits von Tabellen zu ändern. – Quentin

+0

@David - Was du gesagt hast, ist wahr, aber er macht das nicht, er erstellt einen ganzen Tisch, also mag ich es auch nicht ... es ist kein Problem in IE. –

Antwort

1

Sie müssen bei incs -1 beginnen und auf Null zählen. So sollte die Funktion wie

function CreateResultsTable(bps, incs) { 
     var table = document.createElement('table'); 
     var str = '<table border=1>'; 
     str += '<tr><th></th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th></tr>'; 

     var i = 0; 

     // up 
     for (i = 0; i < incs; i++) { 
      var num = (incs - i) * bps; 
      var newStr = num.toString(); 
      str += '<tr><th>' + newStr + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>'; 
     } 
     i = 0; 

     //down 
     for (i = incs - 1; i >= 0; i--) { 
      var num = (incs - i) * bps; 
      var newStr = '-' + num.toString(); 
      str += '<tr><th>' + newStr + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>'; 
     } 
     return str; 
    } 
+0

Während dies das Problem in der Frage löst, gibt es einen * viel * einfacheren Weg, um darüber zu gehen, siehe meine Antwort unten :) –

2

Sie letzte Schleife muss >= statt nur sein > und starten eine untere, wie folgt aus:

for (i = incs-1; i >= 0; i--) { 

You can test it out here, die einzige andere Änderung eine </table> zusätzlich am Ende und Zitate auf Ihrem Grenze Attribut ist.


Es gibt einen viel einfacheren Weg, um dies aber zu gehen, ist eine einzige Schleife verwenden und 0 ausschließen, wenn Sie wollen, wie folgen aus:

function CreateResultsTable(bps, incs) { 
    var str = '<table border="1">'; 
    str += '<tr><th></th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th></tr>'; 

    for (var i = incs*bps, low = -i; i >= low; i-=bps) { 
     if (i == 0) continue; //exclude the 0 row 
     str += '<tr><th>' + i + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>'; 
    } 
    str += '</table>'; 
    return str; 
} 

You can test the result here, es ist nur ein einfacher/billiger Single- Schleife oder das gleiche tun.

+0

Also wird er '100, 75, 50, 25, -0, -25, -50 100' und nicht' 100, 75, 50, 25, -25, -50 100' bekommen. – gregor

+0

@gregor - wops du hast recht, ich habe sein * erwartet * Ergebnis von der Frage falsch gelesen (gemischt mit seiner tatsächlichen beim Lesen), antwort/demo aktualisiert. –