JavaScript之DOM_动力节点Java学院整理


Posted in Javascript onJuly 03, 2017

由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM。
始终记住DOM是一个树形结构。操作一个DOM节点实际上就是这么几个操作:

  1. 更新:更新该DOM节点的内容,相当于更新了该DOM节点表示的HTML的内容;
  2. 遍历:遍历该DOM节点下的子节点,以便进行进一步操作;
  3. 添加:在该DOM节点下新增一个子节点,相当于动态增加了一个HTML节点;
  4. 删除:将该节点从HTML中删除,相当于删掉了该DOM节点的内容以及它包含的所有子节点。

在操作一个DOM节点前,我们需要通过各种方式先拿到这个DOM节点。最常用的方法是document.getElementById()document.getElementsByTagName(),以及CSS选择器document.getElementsByClassName()

由于ID在HTML文档中是唯一的,所以document.getElementById()可以直接定位唯一的一个DOM节点。

document.getElementsByTagName()document.getElementsByClassName()总是返回一组DOM节点。要精确地选择DOM,可以先定位父节点,再从父节点开始选择,以缩小范围。

例如:

// 返回ID为'test'的节点:
var test = document.getElementById('test');

// 先定位ID为'test-table'的节点,再返回其内部所有tr节点:
var trs = document.getElementById('test-table').getElementsByTagName('tr');

// 先定位ID为'test-div'的节点,再返回其内部所有class包含red的节点:
var reds = document.getElementById('test-div').getElementsByClassName('red');

// 获取节点test下的所有直属子节点:
var cs = test.children;

// 获取节点test下第一个、最后一个子节点:
var first = test.firstElementChild;
var last = test.lastElementChild;

第二种方法是使用querySelector()querySelectorAll(),需要了解selector语法,然后使用条件来获取节点,更加方便:

// 通过querySelector获取ID为q1的节点:
var q1 = document.querySelector('#q1');

// 通过querySelectorAll获取q1节点内的符合条件的所有节点:
var ps = q1.querySelectorAll('div.highlighted > p');

注意:低版本的IE<8不支持querySelectorquerySelectorAll。IE8仅有限支持。

严格地讲,我们这里的DOM节点是指Element,但是DOM节点实际上是Node,在HTML中,Node包括ElementCommentCDATA_SECTION等很多种,以及根节点Document类型,但是,绝大多数时候我们只关心Element,也就是实际控制页面结构的Node,其他类型的Node忽略即可。根节点Document已经自动绑定为全局变量document

练习

如下的HTML结构:

JavaScript
Java
Python
Ruby
Swift
Scheme
Haskell

<!-- HTML结构 -->
<div id="test-div">
<div class="c-red">
  <p id="test-p">JavaScript</p>
  <p>Java</p>
 </div>
 <div class="c-red c-green">
  <p>Python</p>
  <p>Ruby</p>
  <p>Swift</p>
 </div>
 <div class="c-green">
  <p>Scheme</p>
  <p>Haskell</p>
 </div>
</div>

请选择出指定条件的节点:

// 选择<p>JavaScript</p>:
var js = ???;
// 选择<p>Python</p>,<p>Ruby</p>,<p>Swift</p>:
var arr = ???;
// 选择<p>Haskell</p>:
var haskell = ???;

Javascript 相关文章推荐
JS中类或对象的定义说明
Mar 10 Javascript
Google Maps API地图应用示例分享
Oct 23 Javascript
JavaScript 异常处理 详解
Feb 06 Javascript
简述AngularJS的控制器的使用
Jun 16 Javascript
移动Web中图片自适应的两种JavaScript解决方法
Jun 18 Javascript
Bootstrap select实现下拉框多选效果
Dec 23 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
Sep 19 Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 Javascript
JS实现判断移动端PC端功能
Feb 21 Javascript
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
原生微信小程序开发中 redux 的使用详解
Feb 18 Javascript
javaScript中封装的各种写法示例(推荐)
Jul 03 #Javascript
JavaScript之class继承_动力节点Java学院整理
Jul 03 #Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 #Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 #Javascript
React组件生命周期详解
Jul 03 #Javascript
利用Vue.js实现求职在线之职位查询功能
Jul 03 #Javascript
Swiper实现轮播图效果
Jul 03 #Javascript
You might like
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
python动态加载包的方法小结
2016/04/18 Python
python实现发送邮件功能
2017/07/22 Python
Windows下python3.7安装教程
2018/07/31 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
Python实现FTP文件传输的实例
2019/07/07 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
Python随机数函数代码实例解析
2020/02/09 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
C#基础面试题
2016/10/17 面试题
介绍一下Make? 为什么使用make
2016/07/31 面试题
应聘护士自荐信
2013/10/21 职场文书
大学生个人自我鉴定
2013/12/03 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
5s推行计划书
2014/05/06 职场文书
金融专业求职信
2014/08/05 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
迎新生标语大全
2014/10/06 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书