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计数器代码
Nov 04 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
jQuery实现带渐显效果的人物多级关系图代码
Oct 16 Javascript
JavaScript判断数字是否为质数的方法汇总
Jun 02 Javascript
javascript 判断页面访问方式电脑或者移动端
Sep 19 Javascript
jquery二级目录选中当前页的css样式
Dec 08 Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
JavaScript 事件对内存和性能的影响
Jan 22 Javascript
浅谈angular2路由预加载策略
Oct 04 Javascript
解决vue打包之后静态资源图片失效的问题
Feb 21 Javascript
关于Vue中的options选项
Mar 22 Vue.js
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面向对象程序设计之类常量用法实例
2014/08/20 PHP
php简单统计中文个数的方法
2016/09/30 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
python实现进程间通信简单实例
2014/07/23 Python
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
机械工程系毕业生求职信
2013/09/27 职场文书
高三体育教学反思
2014/01/29 职场文书
金融事务专业求职信
2014/04/25 职场文书
保证书范文大全
2014/04/28 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
单位实习鉴定评语
2015/01/04 职场文书
服务承诺书
2015/01/19 职场文书
会计工作检讨书
2015/02/19 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python
Java中的继承、多态以及封装
2022/04/11 Java/Android