Tips:点此可运行HTML源码

使用appendChild巧妙解决火狐下innerHTML无法沿用input数据问题

canrun

今天做一个模块的时候碰到了一个问题:使用innerHTML追加数据的时候导致已填写的input数据丢失,这个问题对于jQuery的append来说是不会存在问题的,但是现在并没有引用jQuery,因此,怎样才能让数据追加到指定div的末端呢?我想到了appendChild方法,但是appendChild的处理对象是一个Element,直接将html标签作为参数是不行的,因此为了能够成功追加数据,我只好退而求其次,将html标签使用innerHTML包含进一个新建的Element中,然后将这个Element使用appendChild方法追加到div中,就这样,问题解决了,新追加的数据并不会影响当前div已有的数据。下面是innerHTML直接追加与appendChild解决追加问题的源码:

 1 <!DOCTYPE>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>js innerHTML append data</title>
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6     <meta http-equiv="Content-Language" content="zh-CN" />
 7 </head>
 8 <body>
 9 解决问题:使用container_innerHTML,输入数据在新添加时丢失;使用container_appendChild则不会。
10 <br/>
11 存在不足:使用container_appendChild的每一个input都被一个div包含着。
12 <br/>
13 container_innerHTML:<div id="container_innerHTML"></div>
14 <br/>
15 container_appendChild:<div id="container_appendChild"></div>
16 <input type="button" value="添加" id="add"></input>
17 <script type="text/javascript">
18 var tpl = '<input type="text" value=""/>';  //这里只是一个简单的input,还可以是很多很多标签集合,因此我没有直接使用createElement('input')进行appendChild
19 document.getElementById('add').onclick = function(){
20     //container_innerHTML
21     document.getElementById('container_innerHTML').innerHTML += tpl;

    //新增,通过存储数据也能实现数据的沿用,不过没有appendChild来的方便。
    //container_innerHTML
       
var inputs = document.getElementById('container_innerHTML').getElementsByTagName('input');
       var storeInputs = [];
     //存储input的数据
       
for(var i=0;i<inputs.length;i++){
          storeInputs[i] = inputs[i].value;
       }
       document.getElementById('container_innerHTML').innerHTML += tpl;
     //还原input的数据
       for(var i=0;i<inputs.length-1;i++){
          inputs[i].value = storeInputs[i];
       }
22 23 //container_appendChild 24 var div = document.createElement('div'); 25 div.innerHTML = tpl; 26 document.getElementById('container_appendChild').appendChild(div); 27 } 28 </script> 29 </body> 30 </html>
posted @ 2012-12-03 13:00  Zjmainstay  阅读(2071)  评论(0编辑  收藏  举报