• 使用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>
    作者:Zjmainstay
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    版权信息
  • 相关阅读:
    Selenium(Python)等待元素出现
    java文件的I/O
    Map的四种遍历方式
    模板类实现链表
    字符串相关库函数使用
    动态规划之背包问题
    最长递增子序列
    深度优先搜索(DFS),逃离迷宫
    素数环问题(递归回溯)
    枚举(百鸡问题)
  • 原文地址:https://www.cnblogs.com/Zjmainstay/p/js_innerHTML_input.html
Copyright © 2020-2023  润新知