讲给Android程序员看的前端教程(34)——DOM编程
来源:互联网 发布:二代身份证阅读软件 编辑:程序博客网 时间:2024/06/05 18:41
自定义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
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程序员看的前端教程(34)——DOM编程
- 讲给Android程序员看的前端教程(01)——HTML5入门
- 讲给Android程序员看的前端教程(02)——HTML5标签(1)
- 讲给Android程序员看的前端教程(03)——HTML5标签(2)
- 讲给Android程序员看的前端教程(04)——HTML5标签(3)
- 讲给Android程序员看的前端教程(05)——HTML5标签(4)
- 讲给Android程序员看的前端教程(06)——HTML5标签(5)
- 讲给Android程序员看的前端教程(07)——HTML5标签(6)
- 讲给Android程序员看的前端教程(08)——HTML5标签(7)
- 讲给Android程序员看的前端教程(09)——HTML5标签(8)
- 讲给Android程序员看的前端教程(10)——CSS概述
- 讲给Android程序员看的前端教程(11)——CSS选择器(1)
- 讲给Android程序员看的前端教程(12)——CSS选择器(2)
- 讲给Android程序员看的前端教程(13)——CSS选择器(3)
- 讲给Android程序员看的前端教程(14)——CSS选择器(4)
- 讲给Android程序员看的前端教程(15)——CSS选择器(5)
- 讲给Android程序员看的前端教程(16)——伪类
- 讲给Android程序员看的前端教程(17)——伪元素
- LINUX与SHELL编程
- FPGA资源平民化
- Collections对List集合中的数据进行排序
- 在Java中用DatagramSocket实现UDP协议编程
- js检测IE8及一下浏览器版本并做出提示
- 讲给Android程序员看的前端教程(34)——DOM编程
- bootstrap之scrollspy
- AndroidStudio ndk编译错误
- CIFAR-10训练模型
- debian安装jdk+tomcat+mysql
- 微信公众号之授权获取用户信息(获取unionid)
- mt6735 [Audio Driver]工厂测试模式下如果调整音量
- 一个时间点(时分)加上一段分钟数得到新的时间点
- Pytho正则表达式-match