动态删除元素

给定一个ul列表,点击ul中子节点进行删除

             window.onload = function() {
var list = document.getElementsByTagName("ul")[].childNodes; ()
console.log(list.length); ()
var list=document.getElementById("list"); ()
for (var i = ; i < list.length; i++) {
list[i].onclick = function() {
console.log(i); ()
console.log(list[i].innerHTML); ()
this.parentNode.removeChild(this); ()
}
}
} <ul id="list">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul> /*
解析:可以通过(1)或者(3)来获取列表元素id。(2)中打印出来的列表长度为11,因为其中包含6个空文本节点。(4)中打印出11,因为
此时还未进行点击,所以直到循环完,并返回11,当然此时(5)会出现下面错误!
*/

动态添加元素

依然以上面为例,此时来进行添加元素。

var li = document.createElement("li");

li.innerHTML = "动态添加";
list.appendChild(li); /*在列表ul中最后进行追加一个元素li*/ list.insertBefore(li,list.childNodes[2]); /* 在ul中第二个子节点前添加一个li,此时第二个为空文本节点,也可以为
list.insertBefore(li,list.childNodes[3]);此时第三个为li将覆盖第二个的空文本节点

*/

动态交换元素

给定一个ul列表以及数据,现在点击某一节点和下一节点进行交换。

             window.onload = function() {
var list = document.getElementById("list");
for (var i = ; i < list.childNodes.length; i++) {
list.childNodes[i].onclick = function() {
var ns = this.nextSibling;
list.insertBefore(ns,this);
}
}
} <ul id="list">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>

以上代码貌似没错,但是当我点击最后一个节点时出现如下错误

说明考虑不周,当点击最后一个节点时是没有下一个li节点的,此时下一个节点为#text(空文本节点),则此时应出去文本节点必须是点击的li即element(元素节点)修改如下:

            window.onload = function() {
var list = document.getElementById("list");
for (var i = ; i < list.childNodes.length; i++) {
if (list.childNodes[i].nodeType == ) { //节点类型为元素类型
list.childNodes[i].onclick = function() {
var ns = this.nextSibling;
list.insertBefore(ns, this);
}
}
}
}

此时操作还是会出现上述错误!最终得知 nextSibling 是包含空文本节点,而 nextElementSibling 只得到元素节点,所以最终代码修改为:

            window.onload = function() {
var list = document.getElementById("list");
for (var i = ; i < list.childNodes.length; i++) {
if (list.childNodes[i].nodeType == ) {
list.childNodes[i].onclick = function() {
if (this.nextElementSibling) {
var ns = this.nextElementSibling;
list.insertBefore(ns, this);
}
}
}
}
}

动态修改元素

同样给定一个ul列表当点击其子节点时进行修改并保存,其列表如下:

        <ul id="list">
<li>长沙</li>
<li>岳阳</li>
<li>株洲</li>
<li>衡阳</li>
<li>益阳</li>
<li>常德</li>
</ul>

第一步想到的是创建一个文本框元素,当点击li标签时,将其值赋给文本值且将其添加到li中,代码如下:

             var ip = document.createElement("input");
ip.type = "text";
window.onload = function() {
var list = document.getElementById("list");
for (var i = ; i < list.childNodes.length; i++) {
if (list.childNodes[i].nodeType == ) {
list.childNodes[i].onclick = function() {
ip.value = this.innerHTML;
this.appendChild(ip);
}
}
}
}

当点击某个li后效果如下:

此时我们应该将li中的文本进行删除,所以我们需要添加的代码为:

this.removeChild(this.firstChild);

此时会出现一个问题, 当点击下一个li标签时,上一个li将会移除,如图:

此时我们应该做的是:将其修改的值或未修改的值进行保存,当失去焦点时进行重新赋值即可!所以最终代码修改如下:

             var ip = document.createElement("input");
ip.type = "text";
ip.onblur = function() {
var _ip = ip.value;
ip.parentNode.innerHTML = _ip;
}
window.onload = function() {
var list = document.getElementById("list");
for (var i = ; i < list.childNodes.length; i++) {
if (list.childNodes[i].nodeType == ) {
list.childNodes[i].onclick = function() {
ip.value = this.innerHTML;
this.appendChild(ip);
this.removeChild(this.firstChild);
ip.focus();
}
}
}
}

根据代码修改进行修改成功,界面如下:

总结

在进行元素操作时,时刻要考虑DOM树中空文本节点的存在

(第七天)DOM练习一的更多相关文章

  1. 《JavaScript权威指南》学习笔记 第七天 DOM操作

    由衷的觉得,随着IT技术的广泛的运用,个人电脑以及智能手机的使用,信息的获取与传播更为简单.但是我们获取有用信息的难度相反是越来越大了,想要保持住自己的注意力越来越难了.除了吃饭睡觉,我的精力都在电脑 ...

  2. JavaScript学习记录总结(七)——dom对象应用之用户简单管理

    <!DOCTYPE html><html><head><title>users.html</title> <meta name=&qu ...

  3. javascript第七章--DOM

    ① 节点层次 ② DOM操作技术

  4. JavaScript基础笔记(七)DOM

    DOM DOM可以将任何HTML或者XML文档描述成一个由多层节点构成的结构. 一.节点层次 一)Node类型 DOM1定义了一个Node接口,该接口将由DOM中所有节点类型实现. 每一个节点都有一个 ...

  5. 第七节 DOM操作应用-高级

    表格应用: 获取:tBodies.tHead.tFoot.rows.cells <!DOCTYPE html> <html lang="en"> <h ...

  6. 通俗易懂的来讲讲DOM

    DOM是所有前端开发每天打交道的东西,但是随着jQuery等库的出现,大大简化了DOM操作,导致大家慢慢的“遗忘”了它的本来面貌.不过,要想深入学习前端知识,对DOM的了解是不可或缺的,所以本文力图系 ...

  7. 十六天 css汇总、js汇总、dom汇总

    1.css补充之  后台管理界面  顶部导航栏.左边菜单栏.右边内容栏固定在屏幕相应位置 会有上下左右滚动条,设定窗口最小值,使页面不乱.注意overflow:auto要与position:absol ...

  8. DOM 之通俗易懂讲解

    DOM是所有前端开发每天打交道的东西,但是随着jQuery等库的出现,大大简化了DOM操作,导致大家慢慢的“遗忘”了它的本来面貌.不过,要想深入学习前端知识,对DOM的了解是不可或缺的,所以本文力图系 ...

  9. DOM简要

    在看Js视频的时候就感觉Dom这东西太奇妙了.在这个注重用户体验的Web设计时代里.Dom是至关重要的. 它的易用性强.而且遍历简单.支持XPath. 它既然这么强大那么就来简单的介绍Dom这个东东. ...

  10. JS第二部分--DOM文档对象模型

    一.DOM的概念 二.DOM可以做什么 三.DOM对象的获取 四.事件的介绍 五.DOM节点标签样式属性的操作 六.DOM节点对象对值的操作 七.DOM节点-标签属性的操作(例如id class sr ...

随机推荐

  1. bootstrap之强调文本的类(带颜色)

    bootstrap之强调文本的类(带颜色) <small>本行内容是在标签内</small><br> <strong>本行内容是在标签内</str ...

  2. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  3. poj3250

    //(栈)poj3250将第i头牛能看到多少牛传化为第i头牛能被多少牛看见 /* #include <stdio.h> #include <stack> using names ...

  4. JQM开发Tips

    1.radio Button 点击后有时候有高亮样式,有时候没有 解决方案: $("#task_form label").click(function () { $("# ...

  5. Android app应用多语言切换功能实现

    最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...

  6. VS上关于找不到程序集的问题

    第一次重新装了次vs再次导入以前写的项目发现找不到程序集,出现很多的警告和错误,并且代码里好多都是显示红色的 第二次乱动了下又出现此问题 记录下解决的方案和一些相关的问题方案 1.引用一个DLL,需要 ...

  7. 游戏编程技巧 - Subclass Sandbox

    Subclass Sandbox 使用场景 你正在开发一款类似LOL的游戏,里面有许多英雄角色,你决定把这些英雄类交给小弟们实现.因为在这些英雄中,释放放技能时,有的要使用粒子系统造成炫酷的效果,有的 ...

  8. 另类的表单数据"序列化"

    背景:最近在做项目时,由于编辑页面需要提交的数据量有些多,而且在提交前还需要做一些逻辑处理,所以如果按照正常的方式,一个个的获取值然后拼接json对象传到后台的话相对工作量较大,而且容易出错,后期的维 ...

  9. LVS DR模式 RealServer 为 Windows 2008 R2配置

    有3篇文档详细介绍 http://kb.linuxvirtualserver.org/wiki/Windows_Servers_in_LVS/DR_and_LVS/TUN_Clusters http: ...

  10. Android应用安全开发之浅谈加密算法的坑

      <Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题     Android开发中,难免会遇到需要加解密一些数据内 ...