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 相关文章推荐
Add Formatted Text to a Word Document
Jun 15 Javascript
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
javascript中递归函数用法注意点
Jul 30 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
Aug 24 Javascript
深入理解jQuery3.0的domManip函数
Sep 01 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
bootstrap daterangepicker汉化以及扩展功能
Jun 15 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
May 10 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
vue封装swiper代码实例解析
Oct 08 Javascript
js实现带箭头的进度流程
Mar 26 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应用中使用XOR运算加密算法分享
2011/08/28 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
最短的IE判断代码
2011/03/13 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
Python中__name__的使用实例
2015/04/14 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
python实现滑雪游戏
2020/02/22 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
优秀教师推荐材料
2014/12/16 职场文书
个人年终总结开头
2015/03/06 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python