如何在不删除之前的 innerHTML 的情况下使用 innerHTML? [复制]

Posted

技术标签:

【中文标题】如何在不删除之前的 innerHTML 的情况下使用 innerHTML? [复制]【英文标题】:How can I use innerHTML without delete the before innerHTML? [duplicate] 【发布时间】:2012-04-17 01:03:53 【问题描述】:

可能重复:Is it possible to append to innerhtml without destroying descendants' onclick functions?

我想将 Array 转换为 HTML 表格,但 innerHTML 删除了它之前写入的内容。代码如下:

<html><div id="tablaP"></div>

function cargar2() 
    document.getElementById('tablaP').innerHTML= "<table>"
    var h=1
    for (i=0;i<miArray.length;i++) 
        document.getElementById('tablaP').innerHTML = '<tr>'
        for (j=0;j<miArray[i].length;j++)              
            document.getElementById("tablaP").innerHTML = '<td><td>'
        
        document.getElementById('tablaP').innerHTML = '</tr>'
        h++
    
    document.getElementById('tablaP').innerHTML = '</table>'

【问题讨论】:

这是关于该主题的另一个 SO 问题:***.com/questions/595808/… 【参考方案1】:

这可以通过构建您的 html 字符串然后通过一次调用应用它来轻松完成:

function cargar2()
    var h=1;//not sure why you have this
    var html = "";

    html += "<table>";

    for (i=0;i<miArray.length;i++) 
        html += '<tr>';

        for (j=0;j<miArray[i].length;j++)              
            html += '<td></td>' ;                      
           

        html += '</tr>';
        h++;
    

    html += '</table>';

    document.getElementById('tablaP').innerHTML = html;

编辑:修复所有代码格式!

【讨论】:

【参考方案2】:

使用其他方法。将整个表格构建为字符串,然后执行单个 innerHTML。

这样它会很快,并且与 IE 兼容,在动态向表中添加行时会出现一些可怕的相关错误......

【讨论】:

【参考方案3】:

创建一个字符串变量并将表格的内容添加到该变量中,例如:

var h=1;
var table='<table>';
for(i=0;i<miArray.length;i++) 
    table+='<tr>';
    for(j=0;j<miArray[i].length;j++) 
        table+='<td></td>';
    
    table+='</tr>';
    h++;

document.getElementById('tablaP').innerHTML=table+'</table>';

【讨论】:

【参考方案4】:

您应该将所有表创建附加到一个字符串,然后最后将该字符串分配给innerHTML,如下所示。

    function cargar2() 
       var tableCreation = "<table>"  
  var h=1 
  for (i=0;i<miArray.length;i++)
            
     tableCreation += '<tr>'     
     for (j=0;j<miArray[i].length;j++)
                           
        tableCreation += '<td></td>'             
             
     tableCreation += '</tr>' h++  
 

document.getElementById('tablaP').innerHTML = tableCreation; 

【讨论】:

【参考方案5】:

为了有效地做到这一点,将 HTML 片段推送到一个数组中,将数组中的字符串连接成一个字符串,然后使用 innerHTML 将其放入元素中:

function cargar2() 
  var html = ['<table>'];
  var h = 1;
  for (i = 0; i < miArray.length; i++)  
    html.push('<tr>');
    for (j = 0; j < miArray[i].length; j++)               
      html.push('<td><td>');
    
    html.push('</tr>');
    h++;
  
  html.push('</table>');
  document.getElementById('tablaP').innerHTML = html.join('');

【讨论】:

【参考方案6】:

天哪,有多少东西让人眼前一亮……

    不要在每次需要 div 时调用 document.GetElementByID()!

    改用引用(变量):

    var myTableDiv = document.getElementById('tablaP');

    myTableDiv.InnerHTML += ""

    myTableDiv.innerHTML += "";

    我主要建议设置一个字符串.. 最后才通过 InnerHTML。

    例如

    var myTableHTML = ""; 变量 h=1 对于 (i=0;i'; 对于 (j=0;j myTableHTML += ''; myTableHTML += ''; h++ document.getElementById('tablaP').innerHTML = myTableHTML;

【讨论】:

以上是关于如何在不删除之前的 innerHTML 的情况下使用 innerHTML? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不弄乱下拉值的情况下使 Angular Reactive Formarray 中的级联下拉菜单工作

如何在不使用滤镜的情况下使图像变暗? [复制]

如何在不需要额外点击的情况下使 DataGridCheckBoxColumn 可编辑?

如何在不使用 div 的情况下使 iframe 响应?

如何在不重复自己的情况下使该算法更懒惰?

如何在不打开应用程序的情况下使 ContentObserver 工作?