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 相关文章推荐
jquery提示 &quot;object expected&quot;的解决方法
Dec 13 Javascript
jQuery 前的按键判断代码
Mar 19 Javascript
Javascript中Date类型和Math类型详解
Feb 27 Javascript
javascript 用函数实现继承详解
May 28 Javascript
详解Vue-基本标签和自定义控件
Mar 24 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
JS实现图片拖拽交换效果
Nov 30 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
Feb 02 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
JS立即执行的匿名函数用法分析
Nov 04 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
python抓取网页中链接的静态图片
2018/01/29 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Python连接字符串过程详解
2020/01/06 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
香港交友网站:be2香港
2018/07/22 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
党员领导干部承诺书
2014/05/28 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书