2017-03-15 2 views
0

Ich habe diesen Code, der eine Tabelle mit 7 Spalten erstellt.Hinzufügen <select> innerhalb von

Die Tabelle zurückgibt, wie folgt aus:
[1] [2] [3] [4] [5] [6] [7] < < headers
[1] [2] [3] [4] [5] [6] [7] < < Werte

Wo die 7. Spalte eine <a> Taste innerhalb eines <td>.

Ich versuche herauszufinden, wie Sie eine <select> mit <option>'s innerhalb der 6. Spalten <td> hinzufügen.

//create table 
    var artistFileValues = artistFile.getDataRange().getValues(); 
    var isHeader = true; 
    var table = "<table id='table-noValues'>\n"; 
    var caption = "<caption>" + name + "</caption>\n"; 

    table += caption; 

    for (var i = 0; i < artistFileValues.length; i++) 
    { 
    table += "<tr>\n"; 

    for (var j = 0; j < artistFileValues[i].length; j++) 
    { 
     if (isHeader) 
     { 
     table += "<th>" + artistFileValues[i][j] + "</th>\n"; //headers 
     if (j == artistFileValues[i].length - 1) //if last header in row, add another cell with 'add' button 
     { 
      table += "<th style='text-align: center;'>" + "<a id='addButton' onclick=\x22addRow(this)\x22>" + "&plus;" + "</a>" + "</th>\n"; //'+' button 
     } 
     } 
     else 
     { 
     table += "<td contenteditable='false'>" + artistFileValues[i][j] + "</td>\n"; //values 
     if (j == artistFileValues[i].length - 1) //if last data in row, add another cell with 'delete' button 
     { 
      table += "<td style='text-align: center;'>" + "<a id='deleteButton' onclick=\x22deleteRow(this)\x22>" + "&times;" + "</a>" + "</td>\n"; //'x' button 
     } 
     } 
    } 
    isHeader = false; 
    table += "</tr>\n"; 
    } 
    table += "</table>"; 
    table += "<button id='calculateButton' onclick='calculate()'>" + "Calculate" + "</button>"; //add calculate button to bottom of table 
    return table; 

Ich gehe davon aus Ich hätte eine if-Anweisung oder eine for-Schleife zu implementieren, die auf 5 zählt und addiert dann das Innere des sechsten. Ich bin mir nicht sicher, was der beste Weg ist, dies zu tun, oder ob dies der richtige Weg ist.

Aber jede Hilfe wäre willkommen.

+0

zum Thema zuerst zeigen Sie uns Ihre Versuche und was scheitert. –

+0

Ich würde Template-HTML dafür verwenden. Was ich mache, ist zwei HTML-Dateien, eine für das meist feste HTML, und dann eine für die Vorlage jeder Zeile. Es wird kompliziert, aber mein Punkt ist: Für HTML, das sich nicht ändern wird, habe ich einfach eine HTML-Datei mit der grundlegenden Struktur, und dann die Teile, die sich ändern werden, haben ein "Scriptlet". Wie auch immer, es wird kompliziert und schwierig zu debuggen. Bis zu einem gewissen Grad fragen Sie eine Debugging-Frage. Verketten von Text ist großartig. Ich benutze es die ganze Zeit, aber ich mag auch Template-Text mit Merge-Feldern, die ich ersetze. –

+0

Zum Beispiel: 'var myOptionTemplate = " "' Verwenden Sie dann 'ersetzen()' die Werte ersetzen: 'var optionHtml = myOptionTemplate.replace (" my_Merge_field_for_Value", thisRowValue)' –

Antwort

0

Finden Sie einfach heraus, wo Sie es setzen möchten und geben Sie die optionscsv-Zeichenfolge und die valuescsv-Zeichenfolge an, und alle Tags für die öffnenden und schließenden Tags select und options werden generiert.

function mySelect(optionscsv,valuescsv) 
{ 
    var optionscsv = (typeof(optionscsv) !== 'undefined')?optionscsv : null; 
    var valuescsv = (typeof(valuescsv) !== 'undefined')?valuescsv : null; 
    var s='<select>'; 
    if(valuescsv && optionscsv) 
    { 
    var optionsA = optionscsv.split(','); 
    var valuesA = valuescsv.split(','); 
    if(optionsA.length == valuesA.length) 
    { 
     for(var i = 0; i < optionsA.length; i++) 
     { 
     s += '<option value="' + valuesA[i] + '">' + optionsA[i] + '</option>'; 
     } 
     s += '</select>'; 
    } 
    else 
    { 
     s =''; 
    } 

    } 
    else 
    { 
    s = ''; 
    } 
    return s; 
} 

Und unten Ich habe eine Vermutung an, wo Sie ihm vorlegen wollen und wie Sie es tun könnte. Aber ich könnte falsch liegen, also komm zurück für mehr Hilfe wenn nötig.

for (var j = 0; j < artistFileValues[i].length; j++) 
    { 
     if (isHeader) 
     { 
     table += "<th>" + artistFileValues[i][j] + "</th>\n"; //headers 
     if (j == artistFileValues[i].length - 1) //if last header in row, add another cell with 'add' button 
     { 
      table += "<th style='text-align: center;'>" + "<a id='addButton' onclick=\x22addRow(this)\x22>" + "&plus;" + "</a>" + "</th>\n"; //'+' button 
     } 
     } 
     else 
     { 
     if(j!==5)//I'm guessing this is the sixth column 
     { 
      table += "<td contenteditable='false'>" + artistFileValues[i][j] + "</td>\n"; //values 
     } 
     else 
     { 
      var s = mySelect(optionscsv,valuescsv); 
      table += "<td contenteditable='false'>" + artistFileValues[i][j] + s + "</td>\n"; //values 
     } 
     if (j == artistFileValues[i].length - 1) //if last data in row, add another cell with 'delete' button 
     { 
      table += "<td style='text-align: center;'>" + "<a id='deleteButton' onclick=\x22deleteRow(this)\x22>" + "&times;" + "</a>" + "</td>\n"; //'x' button 
     } 
     } 
    } 
Verwandte Themen