2014-11-04 61 views
0

沒關係。這是我的錯誤。此代碼工作正常。設置動態生成表的ID時遇到問題

我有一個應該創建和填充表的函數。我也試圖設置一些列的id元素,但我有的功能不工作,我似乎無法弄清楚爲什麼。

這是我的代碼:

HTML:

<div id="result_table"> 

      <table border="0" cellspacing="3" cellpadding="3" id="summaryTable" class="tablesorter table table-striped"> 
      <thead> 
      <tr style="font-weight: bold; text-align: center;"> 
      <th>Well ID</th> 
      <th>Dominant Gene</th> 
      <th>%</th> 
      <th>Secondary Gene</th> 
      <th>%</th> 
      <th>No. of Reads that Mapped</th> 
      <th>No. of Mutations</th> 
      <th>Mutation Information</th> 
      <th>View</th> 
      </tr> 
      </thead> 
     <tbody id="summaryBody"> 
     </tbody> 
    </table> 
</div> 

的Javascript:

function structureTable(test){ 
    if (kiloseqResult==null){ 
     throw "Error: no databse defined" 
    }; 

    document.getElementById("summaryTable").style.visibility="visible"; 
    kiloseqDatabase = JSON.parse(kiloseqResult); 

    var table = document.getElementById("summaryBody"); 

    for (i=0;i<kiloseqDatabase.length;i++){ 
     var row = table.insertRow(i); 

     var kiloseqKeys = Object.keys(kiloseqDatabase[i]) 
     var keyLength = Object.keys(kiloseqDatabase[i]).length; 

     // Painstakingly setting up the cells... 

     var cell = row.insertCell(0); 
     cell.innerHTML = kiloseqDatabase[i]['id'] 

     var cell = row.insertCell(1); 
     cell.innerHTML = kiloseqDatabase[i]['gene1'].substr(5) 

     var cell = row.insertCell(2); 
     cell.innerHTML = parseFloat(kiloseqDatabase[i]['percent1']).toFixed(2) 

     var cell = row.insertCell(3); 
     if (kiloseqDatabase[i]['gene2']=="None"){ 
      cell.innerHTML = "None" 
     } else { 
      cell.innerHTML = kiloseqDatabase[i]['gene2'].substr(5) 
     } 

     var cell = row.insertCell(4); 
     cell.innerHTML = parseFloat(kiloseqDatabase[i]['percent2']).toFixed(2) 

     var cell = row.insertCell(5); 
     cell.innerHTML = kiloseqDatabase[i]['count'] 

     var cell = row.insertCell(6); 
     cell.innerHTML = "" 

     var cell = row.insertCell(7); 
     cell.innerHTML = "" 

     var cell = row.insertCell(8); 
     cell.innerHTML = "" 

    }; 

    $(document).ready(function() 
     { 
      $("#summaryTable").tablesorter(
       {sortList: [[0,0], [1,0]]} 
       ); 
     } 
    ); 

    for (i=0;i<kiloseqDatabase.length;i++){ 
     document.getElementById("summaryBody").rows[i].cells[6].id = "test"; 
    }; 
}; 

kiloseqResult是檢查是否kiloseqDatabase填充的變量。 kilqqDatabase包含應該填充表的信息。

奇怪的是,設置ID的for循環(是的,我試過在第一個for循環中嘗試包括這個,但當它沒有工作時試圖分解它)在我運行時很好我的Chrome控制檯。但它似乎並沒有在這個功能中起作用。

任何幫助將不勝感激。謝謝!

回答

1

您是否嘗試將您的ID分配邏輯放在document.ready範圍內?您無法爲元素分配ID或在DOM呈現之前將其從DOM中選中:

$(document).ready(function() 
     { 
      $("#summaryTable").tablesorter(
       {sortList: [[0,0], [1,0]]} 
       ); 
      for (i=0;i<kiloseqDatabase.length;i++){ 
       document.getElementById("summaryBody").rows[i].cells[6].id = "test"; 
      }; 
     } 
    ); 
+0

這看起來似乎不起作用。我也想知道爲什麼我無法設置.id元素,當我可以設置.innerHTML時,即使它不在document.ready – Gina 2014-11-04 18:39:42

+0

什麼是不工作? ID分配或選擇器?嘗試(在for循環中)$(「#summaryBody」)。rows [i] .cells [6] .prop(「id」,「test」+ i.toString()); – 2014-11-04 18:59:57

+0

Eep。這是我的錯誤 - 事實證明我一直在加載錯誤的文件。我原來的代碼(以及你的建議)都很好。謝謝你,給你造成的不便深表歉意! – Gina 2014-11-04 19:03:17