讲给Android程序员看的前端教程(34)——DOM编程
2017-12-04 09:47
1081 查看
自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
作者博客地址:http://blog.csdn.net/lfdfhl
本文视频教程:http://www.stay4it.com/my/course/37
所以,可通过JavaScript代码访问、修改、新增、删除DOM树里的节点;而且一旦我们修改了DOM树,浏览器中的HTML也会立马随之改变!这就有趣多了,之前我们写的那些前端代码很少有与浏览器之间的交互,现在终于迈出新的步伐了。嗯哼,来吧,现在我们就来利用window的document对象操作DOM树实现对HTML文档的简单操作。
运行后效果图如下所示:
在该实例中用了三种方式访问HTML中的标签,详解如下:
对于标签的修改挺简单:先找到标签再修改其innerHTML或value即可;请参见代码第7-12行
appenChild( ) 将节点添加成父节点的最后一个子节点
insertBefore( ) 在某个节点之前插入新的节点
replaceChild( ) 将老节点替换成新节点
在此通过第二种方式向HTML中添加新的标签;请看如下示例:
运行后效果如下所示:
代码解析如下:
利用document.createElement( )创建新的节点,请参见代码第9行
为新节点设置内容,请参见代码第10行
将新节点添加至父节点,请参见代码第11行
代码解析如下:
获得待删节点,请参见代码第8行
获得待删除节点的父节点,请参见代码第9行
利用removeChild( )从父节点中删除子节点,请参见代码第10行
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
版权声明
本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl
本文视频教程:http://www.stay4it.com/my/course/37
DOM简介
其实,一提到DOM,大家并不陌生,面试的时候也经常问到Android常用的xml解析方式SAX、DOM、PULL;做java开发的童鞋也时常使用dom4j。DOM即文档对象模型(Document Object Model)的简称,DOM解析就是将结构化文档(比如:XML和HTML)转换成设备内存中的DOM树,请看下图:所以,可通过JavaScript代码访问、修改、新增、删除DOM树里的节点;而且一旦我们修改了DOM树,浏览器中的HTML也会立马随之改变!这就有趣多了,之前我们写的那些前端代码很少有与浏览器之间的交互,现在终于迈出新的步伐了。嗯哼,来吧,现在我们就来利用window的document对象操作DOM树实现对HTML文档的简单操作。
访问标签
在此通过DOM操作,访问HTML中的标签;请看如下示例:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>DOM</title> <script type="text/javascript"> var getByID=function(){ var nameValue=document.getElementById("name").innerHTML; var introduceValue=document.getElementById("introduce").value; alert("nameValue="+nameValue+" , introduceValue="+introduceValue); } var getBySelector=function(){ var nameValue=document.querySelector("#name").innerHTML; var introduceValue=document.querySelector("#introduce").value; alert("nameValue="+nameValue+" , introduceValue="+introduceValue); } var getByNode=function(){ var currentNode=document.getElementById("java"); var previousNode=currentNode.previousSibling.previousSibling; var previousNodeVaule=previousNode.innerHTML; var nextNode=currentNode.nextSibling.nextSibling; var nextNodeVaule=nextNode.innerHTML; alert("previousNodeVaule="+previousNodeVaule+" , nextNodeVaule="+nextNodeVaule); } </script> </head> <body> <p id="name">谷哥的小弟</p> <textarea id="introduce" cols="20" rows="3">坚持原创,热衷分享</textarea> <br> <br> <input type="button" value="依据ID访问标签" onclick="getByID();"> <br> <br> <input type="button" value="依据选择器访问标签" onclick="getBySelector();"> <br> <br> <ol> <li>Android</li> <li id="java">Java</li> <li>Python</li> </ol> <input type="button" value="依据节点关系访问标签" onclick="getByNode();"> <br> <br> </body> </html>
运行后效果图如下所示:
在该实例中用了三种方式访问HTML中的标签,详解如下:
依据ID访问标签
利用方法document.getElementById( )依据元素的id获取标签,请参见代码第7-11行。在此请注意:HTML中大部分标签(比如div、p、td)的内容都可通过属性innerHTML获取到;但是有些标签(比如input、textarea)的内容则是通过属性value获取的。依据选择器访问标签
利用方法document.querySelector( )依据元素的选择器获取标签,请参见代码第13-17行。它和刚才的依据ID访问标签非常类似,不再赘述。依据选择器访问标签
利用节点之间的关系(比如父子关系、兄弟关系)获访问标签,请参见代码第19-26行。在此,请注意每两个li标签之前的回车换行也是ol标签的子节点!修改标签
在此通过DOM操作,修改HTML中的标签;请看如下示例:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>DOM</title> <script type="text/javascript"> var updateValue=function(){ var javaNode=document.getElementById("java"); javaNode.innerHTML="J2EE"; var introduceNode=document.getElementById("introduce"); introduceNode.value="积累技术,沉淀生活"; } </script> </head> <body> <ol> <li>Android</li> <li id="java">Java</li> <li>Python</li> </ol> <textarea id="introduce" cols="20" rows="3">坚持原创,热衷分享</textarea> <br> <br> <input type="button" value="修改标签的内容" onclick="updateValue();"> </body> </html>
对于标签的修改挺简单:先找到标签再修改其innerHTML或value即可;请参见代码第7-12行
添加标签
在JavaScript中可用如下方式新增节点:appenChild( ) 将节点添加成父节点的最后一个子节点
insertBefore( ) 在某个节点之前插入新的节点
replaceChild( ) 将老节点替换成新节点
在此通过第二种方式向HTML中添加新的标签;请看如下示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>DOM</title> <script type="text/javascript"> var addNode=function(){ var courseNode=document.getElementById("course"); var osNode=document.createElement("li"); osNode.innerHTML="操作系统"; courseNode.insertBefore(osNode,courseNode.firstChild); } </script> </head> <body> <ol id="course"> <li>数据结构</li> <li>计算机网络</li> <li>计算机组成原理</li> </ol> <input type="button" value="新增标签" onclick="addNode();"> </body> </html>
运行后效果如下所示:
代码解析如下:
利用document.createElement( )创建新的节点,请参见代码第9行
为新节点设置内容,请参见代码第10行
将新节点添加至父节点,请参见代码第11行
删除标签
在此通过DOM操作,删除HTML中的标签;请看如下示例:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>DOM</title> <script type="text/javascript"> var deleteNode=function(){ var netNode=document.getElementById("net"); var courseNode=document.getElementById("course"); courseNode.removeChild(netNode); } </script> </head> <body> <ol id="course"> <li>数据结构</li> <li id="net">计算机网络</li> <li>计算机组成原理</li> </ol> <input type="button" value="删除标签" onclick="deleteNode();"> </body> </html>
代码解析如下:
获得待删节点,请参见代码第8行
获得待删除节点的父节点,请参见代码第9行
利用removeChild( )从父节点中删除子节点,请参见代码第10行
相关文章推荐
- 讲给Android程序员看的前端教程(25)——基本数据类型
- 讲给Android程序员看的前端教程(35)——事件处理机制
- 讲给Android程序员看的前端教程(17)——伪元素
- 讲给Android程序员看的前端教程(02)——HTML5标签(1)
- 讲给Android程序员看的前端教程(15)——CSS选择器(5)
- 讲给Android程序员看的前端教程(26)——数组
- 讲给Android程序员看的前端教程(09)——HTML5标签(8)
- 讲给Android程序员看的前端教程(18)——盒子模型
- 讲给Android程序员看的前端教程(27)——运算符
- 讲给Android程序员看的前端教程(36)——Navigator
- 讲给Android程序员看的前端教程(03)——HTML5标签(2)
- 讲给Android程序员看的前端教程(11)——CSS选择器(1)
- 讲给Android程序员看的前端教程(19)——display属性
- 讲给Android程序员看的前端教程(04)——HTML5标签(3)
- 讲给Android程序员看的前端教程(28)——流程控制
- 讲给Android程序员看的前端教程(05)——HTML5标签(4)
- 讲给Android程序员看的前端教程(12)——CSS选择器(2)
- 讲给Android程序员看的前端教程(37)——canvas
- 讲给Android程序员看的前端教程(20)——float浮动
- 讲给Android程序员看的前端教程(29)——函数