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 相关文章推荐
Javascript 面向对象 继承
May 13 Javascript
jQuery学习笔记之jQuery的事件
Dec 22 Javascript
jquery一般方法介绍 入门参考
Jun 21 Javascript
动态加载js和css(外部文件)
Apr 17 Javascript
javascript常见用法总结
May 22 Javascript
vue2.0多条件搜索组件使用详解
Mar 26 Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 Javascript
sublime text配置node.js调试(图文教程)
Nov 23 Javascript
Bootstrap实现的表格合并单元格示例
Feb 06 Javascript
JS一次前端面试经历记录
Mar 19 Javascript
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
关于React Native 无法链接模拟器的问题
Jun 21 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
做个自己站内搜索引擎
2006/10/09 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
纯JS实现轮播图
2017/02/22 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
Python制作简易注册登录系统
2016/12/15 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
如何让Java程序执行效率更高
2014/06/25 面试题
软件测试常见笔试题
2012/02/04 面试题
机电专业个人自荐信格式模板
2013/09/23 职场文书
商务考察邀请函范文
2014/01/21 职场文书
大学生村官演讲稿
2014/04/25 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
反邪教标语
2014/06/23 职场文书
致青春观后感
2015/06/09 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android