2014-11-04 58 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