2011-09-06 52 views
1

仍然陷入jQuery的hang and,而我在向表中添加行时遇到问题。我得到了代码this link on stackoverflow,但它不工作在IE7,这可悲的是一个浏览器已工作。使用jQuery添加表格行 - IE7特定问题

我认为这个问题是jQuery选择的表,但没有别的我试过了工作。有任何想法吗?

一些代码:

<table id="payments" class="resultsGrid"> 
    <thead> 
     <tr class="header"> 
      <th style="width: 45px;">Type</th> 
      <th style="width: 50px;">Check #</th> 
      <th style="width: 50px;">Amount</th> 
      <th style="width: 50px;">Date</th> 
      <th>Notes</th> 
      <th style="width: 48px;"></th> 
     </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 

而且JS:

var table = $("#payments > tbody:last"); 
    table.empty(); 

    if (demolition.Payments != null) { 
     $("#payments").show(); 

     for (i = 0; i < demolition.Payments.length; i++) { 
      table.append("<tr>"); 
      // blah blah trimmed 
      table.append("</tr>"); 
     } 
    } 
    else { 
     table.append("<tr>"); 
     table.append("<td colspan=\"6\" style=\"padding: 4px;\">No payments recorded.</td>"); 
     table.append("</tr>"); 
    } 
+0

试着在后面加上所有文字一行代码,而不是三个 - 这是可能的开幕TR标签被关闭向右走,而不是等着你去做。您也可以通过将文本“.push”放到数组上并将所有'.join'ed数组一次性全部加入。 – Blazemonger

回答

2

它们合并成一个呼叫。你的jQuery关闭标签并添加一行,然后在行外添加单元格。即使Chrome就会显示此行为jsfiddle

table.append("<tr><td colspan=\"6\" style=\"padding: 4px;\">No payments recorded.</td></tr>"); //This adds a row with its contents contained. 

更重要的是,它们串联成一个字符串,并一次添加的所有行,以减少DOM操作开销。在现代浏览器中,stringbuffer技术不太有用,但由于您使用的是IE7,所以它可能会比+运算符更快。

var buffer = []; 
for (...){ 
    buffer.push("<tr>"); 
    buffer.push(cellOne); 
    buffer.push(cellTwo); 
    buffer.push(cellThree); 
    buffer.push("</tr>"); 
} 

table.append(buffer.join('')); //This speeds up string concatenation. 
+0

使用table.append和一个预先构建的HTML字符串修复了它。谢谢,丹尼斯。 (一旦网站让我接受答案) – zk812