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 @   Zjmainstay  阅读(2090)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示