动态创建元素的三种方式:

第一种:

Document.write();

<body>
<input type="button" id="btn" value="生成元素" onclick="f1()"/>
<input type="text" value=""/>
<script>
document.write("这是新添加的内容");
</script>
<div id="d">
<script>
document.write("<input type='text' value='123'/>");
</script>
</div>
<script>
function f1(){
document.write("<input type='text' value='456'/>");
}
f1();
</script>

使用documen.write()创建元素时,会发生一个问题:默认情况之下,页面由上而下地加载,形成一个文档流,当执行完毕时,文档流就会关闭,从而将之前生成的元素冲刷掉,所以不推荐使用这种方法。

第二种:

使用innerHTML创建元素:

<body>
<div id="d"></div>
<input type="button" value="生成" id="btn"/>
<script>
var txt=document.getElementById("txt");
var d=document.getElementById("d");
var btn=document.getElementById("btn");
//此方法字符串具有不可变性,频繁的操作字符串会造成内存的浪费。
// btn.onclick=function(){
// for(var i=0;i<10;i++){
// d.innerHTML+="<input type='text'><br />";
// }
// }
//因此我们可以先定义一个数组,将字符串存储在数组当中,最后在将数组转化为字符串。
var arr=[];
btn.onclick=function(){
for(var i=0;i<10;i++){
arr.push("<input type='text'><br />");
}
d.innerHTML=arr.join("");
}
</script>
</body>

此方法不适合创建很多元素(标签)时使用。

第三种:

使用document.createElement()创建一个元素:

<body>
<div id="d"></div>
<script>
var d = document.getElementById("d"); //获取div的id
var ul = document.createElement("ul");// 在这里创建一个ul标签
d.appendChild(ul); //将存储在内存中ul标签剪切到div之中
var li = document.createElement("li");//因为都是字符串,所以需要加""是创建出来的一对标签
ul.appendChild(li); //将存储在内存中的li标签剪切到ul之中
li.innerHTML ="1231321";
li.id = "abc";
ul.removeChild(li); //使用removeChild()可以删除ul里面的li标签
</script>
</body>

插入节点:insertBefore()

(微博案例,后发布信息的人排在最上面)

elementNode.insertBefore(new_node,existing_node)

new_node

必需。要插入的节点。

existing_node

必需。已有节点。在此节点之前插入新节点。

<script src="common.js"></script>
<div id="dv">
<ul id="ul">
<li>11111</li>
<li id="li2">22222</li>
<li>33333</li>
<li>44444</li>
</ul>
<script>
var ul=$$("ul");
var lis2=$$("li2");
var lis=ul.children;
ul.insertBefore(li2,lis[0]);//li2为需要插入的节点,lis[0]是需要插入的节点的位置。
</script>

运行结果:

两个事件:onkeydown与onkeyup

Onkeydown键盘按下时触发,不会获得当前的输入内容;

<body>
<script src="common.js"></script>
<input type="text" value="" id="input"/>
<script>
var input=$$("input");
input.onkeydown=function(){
console.log(input.value);
}
// input.onkeyup=function(){
// console.log(input.value);
// }
</script>
</body>

Onkeyup  键盘按下并释放时才会触发

<body>
<script src="common.js"></script>
<input type="text" value="" id="input"/>
<script>
var input=$$("input");
// input.onkeydown=function(){
// console.log(input.value);
// }
input.onkeyup=function(){
console.log(input.value);
}
</script>
</body>
Onkeydown 每输入一个键,按下一个键时打印上一个键
Onkeyup每输入一个k是,释放键盘时打印,若是不松开将不会打印

												

js学习-DOM之动态创建元素的三种方式、插入元素、onkeydown与onkeyup两个事件整理的更多相关文章

  1. Delphi中动态创建窗体有四种方式

    Delphi中动态创建窗体有四种方式,最好的方式如下: 比如在第一个窗体中调用每二个,主为第一个,第二个设为动态创建 Uses Unit2; //引用单元文件 procedure TForm1.But ...

  2. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  3. 仿联想商城laravel实战---5、无刷新的增删改查(动态页面更新的三种方式(html))

    仿联想商城laravel实战---5.无刷新的增删改查(动态页面更新的三种方式(html)) 一.总结 一句话总结: 直接js增加删除修改html 控制器直接返回处理好的页面 用双向绑定插件比如vue ...

  4. JavaWeb_(Struts2框架)Struts创建Action的三种方式

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  5. spring创建bean的三种方式

    spring创建bean的三种方式: 1通过构造方法创建bean(最常用) 1.1 spring默认会通过无参构造方法来创建bean,如果xml文件是这样配置,则实体类中必须要有无参构造方法,无参构造 ...

  6. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

  7. java创建线程的三种方式及其对比

    第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务.第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务.第三种方法:实现c ...

  8. AJPFX总结java创建线程的三种方式及其对比

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...

  9. java创建线程的三种方式及其对照

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类.并重写该类的run方法,该run方法的方法体就代表了线程要完毕的任务.因此把run()方法称为运行 ...

随机推荐

  1. 2014年第五届蓝桥杯C/C++程序设计本科B组决赛

    1.年龄巧合(枚举) 2.出栈次序(推公式/Catalan数) 3.信号匹配(kmp) 4.生物芯片(完全平方数) 5.Log大侠(线段树) 6.殖民地 1.年龄巧合 小明和他的表弟一起去看电影,有人 ...

  2. php源码之计算两个文件的相对路径

    <?php //计算出两个文件的相对路径即path2相对于$path1的相对路径 // http://www.manongjc.com/article/1342.html function ge ...

  3. ORA-27092: size of file exceeds file size limit of the process

    停数据库时遇到下述问题: $ ./addbctl.sh stop You are running addbctl.sh version 120.1 Shutting down database UAT ...

  4. 手机app测试框架

    1.冒烟测试 一般使用mokey或其他自动化测试工具进行测试,保证软件的健壮性和可测性. 2.安装.卸装测试 直接在真机上安装.卸装(adb install 或 adb push到手机上直接安装) 第 ...

  5. ASPxSpinEdit 控件的三元判断

    方法一:<dx:ASPxSpinEdit ID=" DisplayFormatString="c" Width="100px"></ ...

  6. android Drawable的问题

    1.资源解析成Drawable getDrawable(int id); 挺简单一方法,可是 require api 21......如何向下兼容呢???? 幸亏有ContextCompat类...( ...

  7. JS,Jquery获取各种屏幕的宽度和高度

    Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  8. JS 驗證英文字母

    //英文简介栏位焦点离开事件    function checkSummaryEN(SummaryEN) {        var val = $(SummaryEN).val();        v ...

  9. weed-fs 压力测试

    阅读<Weed-FS/杂草文件系统 小文件存储集群 安装 使用 测试>中提到weedfs的负载压力不是很好,在看过代码后进行了相应测试,未发现负载压力有何问题.   weedfs mast ...

  10. CAPI学习心得

    比较有意义资料 Education .ppt User-guide Coherent Accelerator Interface Architecture.pdf ------------------ ...