<script>
function addRow(){
   var htmlData="";
   htmlData += "<div ><input type='text' maxlength='50' name = 'tname' /> </div>";
   document.getElementById('inputdetail').innerHTML += htmlData ;
}
</script>
<div id="inputdetail"></div>
<input type = button value = "addrow" onclick = "addRow(){"/>发现行追加的越多,画面执行的越慢。后来调查好像是innerHTML的问题,请问有高手能解决下么?或者用别的方法来代替innerHTML也可以。

解决方案 »

  1.   

    1.DOM元素的操作本来就对性能有影响
    2.字符串操作耗费时间用下面我改的代码看看效果呢
    <script>
        function addRow(){
            var htmlData=[];
            var str=document.getElementById('inputdetail').innerHTML;
            htmlData.push(str)
            htmlData.push(" <div > <input type='text' maxlength='50' name = 'tname' /> </div>");
            document.getElementById('inputdetail').innerHTML = htmlData.join("") ;
        }
    </script>
    <div id="inputdetail"> </div>
    <input type = button value = "addrow" onclick = "addRow()">
      

  2.   

    楼上说的简单,我也想用appendchild啊,问题是像这样的怎么用?
      

  3.   


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
     </HEAD> <BODY>
      <script> 
    function addRow(){ 
      var inputdetail =  document.getElementById('inputdetail');
      var divTemp=document.createElement("DIV");
      var t= document.createElement("INPUT");
      t.Type="text";
      t.maxlength="50";
      t.Name="tname";
      divTemp.appendChild(t);
      alert(divTemp.innerHTML);
      inputdetail.appendChild(divTemp);

    </script> 
    <div id="inputdetail"> </div> 
    <input type = button value = "addrow" onclick = "addRow()"/>  </BODY>
    </HTML>
      

  4.   


    <script> 
    function addRow(){ 
      var htmlData=""; 
      var div = document.createElement('div');
      var input  = document.createElement('input');
      input.type = 'text';
      input.maxlength = '50';
      input.name = 'tname';
      
      div.appendChild(input); 
      document.getElementById('inputdetail').appendChild(div); 

    </script> 
    <div id="inputdetail"> </div> 
    <input type = button value = "addrow" onclick = "addRow()"/>
      

  5.   

    innerHTML += 的问题。试试:function addRow(){
      var dobj = document.getElementById('inputdetail');
      var htmlData = dobj.innerHTML + " <div > <input type='text' maxlength='50' name = 'tname' /> </div>";
      document.getElementById('inputdetail').innerHTML = htmlData;
    }
      

  6.   


    <script>
        function addRow(){
            var doms=document.getElementById('inputdetail');
            var div=document.createElement("div");
            var ipt=document.createElement("input");
            ipt.type="text";
            ipt.maxlength=50;
            ipt.name="tname";
            div.appendChild(ipt);
            doms.appendChild(div);
        }
    </script>
    <div id="inputdetail"> </div>
    <input type = button value = "addrow" onclick = "addRow()">
      

  7.   

    BeenZ的,执行几百次后,效果跟原先也差不多啊没快到哪里去
      

  8.   

    主要是的时间就是花在最后一个+=上面了:
    这样比较简单了:
    function addRow() {
    var div=document.createElement("div");
    div.innerHTML="<input type='text' maxlength='50' name = 'tname' />";
    document.getElementById('inputdetail').appendChild(div);
    }
      

  9.   

    push的效率并不高在ie下,要使用数组也是用数组索引来访问添加元素,效率比较高
      

  10.   

    function addRow() {
        var div = document.createElement("div");
        div.innerHTML = "<input type='text' maxlength='50' name='tname' />";
        document.getElementById('inputdetail').appendChild(div);
    }
      

  11.   


    如果你要做很多次拼接(+=)操作,那这个方法就会提高效率元素很多的时候慢在dom操作上,innerHTML每次都增加一遍,肯定慢
      

  12.   

    <script>
        function addRow(){
            var doms=document.getElementById('inputdetail');
            var div=document.createElement("div");
            var ipt=document.createElement("input");
            ipt.type="text";
            ipt.maxlength=50;
            ipt.name="tname";
            div.appendChild(ipt);
            doms.appendChild(div);
        }
    </script>
    <div id="inputdetail"> </div>
    <input type = button value = "addrow" onclick = "addRow()">
    如果input 有事件,比如onclick = "set()"的话,应该怎么加的?
      

  13.   

    10楼的直接添加,
    或者
    ipt.onclick=addRow;
      

  14.   


    <script>
        function addRow(){
            var doms=document.getElementById('inputdetail');
            var div=document.createElement("div");
            var ipt=document.createElement("input");
            ipt.type="text";
            ipt.maxlength=50;
            ipt.name="tname";
            ipt.onclick=function(){
                alert("click")
            }
            div.appendChild(ipt);
            doms.appendChild(div);
        }
    </script>
    <div id="inputdetail"> </div>
    <input type = button value = "addrow" onclick = "addRow()">
      

  15.   


    <script> 
    function addRow(){ 
      var htmlData=""; 
      var div = document.createElement('div');
      var input  = document.createElement('input');
      input.type = 'text';
      input.maxlength = '50';
      input.name = 'tname';
      input.onclick = function(){
       alert('aaaaa');
      };
      div.appendChild(input); 
      document.getElementById('inputdetail').appendChild(div); 

    </script> 
    <div id="inputdetail"> </div> 
    <input type = button value = "addrow" onclick = "addRow()"/>
      

  16.   

    <input type = button value = "addrow" onclick = "addRow(){"/> 
    这里好像错了
      

  17.   

    好的,谢谢楼上的。
    还有,如果div有个css的话,要加载class = "test"的话,应该怎么加的?
      

  18.   


    <script> 
    function addRow(){ 
      var htmlData=""; 
      var div = document.createElement('div');
      div.style.color = 'red'; //这么加
      var input  = document.createElement('input');
      input.type = 'text';
      input.maxlength = '50';
      input.name = 'tname';
      input.onclick = function(){
       alert('aaaaa');
      };
      div.appendChild(input); 
      document.getElementById('inputdetail').appendChild(div); 

    </script> 
    <div id="inputdetail"> </div> 
    <input type = button value = "addrow" onclick = "addRow()"/>
      

  19.   

    <script>
        function addRow(){
            var doms=document.getElementById('inputdetail');
            var div=document.createElement("div");
            div.class="test"
            var ipt=document.createElement("input");
            ipt.type="text";
            ipt.maxlength=50;
            ipt.name="tname";
            ipt.onclick=function(){
                alert("click")
            }
            div.appendChild(ipt);
            doms.appendChild(div);
        }
    </script>
    <div id="inputdetail"> </div>
    <input type = button value = "addrow" onclick = "addRow()">
      

  20.   

    或者div.className = 'div';//这里写样式表里CLASS名字 如.div{color:'red';}
      

  21.   

    真的谢谢楼上的了。还有最后一个问题,htmlData += " <div > <input type='text' maxlength='50' name = 'tname' /> <a href = "111.html"><img src = "11.jpg"/></a></div>"; 对于href和img的话,也能用createElement么?
      

  22.   

    能  只要是HTML标签都能
      

  23.   

    createElement("a);
    和createElement("img");?
      

  24.   


    var a = document.createElement('a');
    var img = document.createElement('img');
      

  25.   

    如果赋值的话就这样
    a.href = '';
    img.src = '';