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 相关文章推荐
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
Jun 26 Javascript
js中将URL中的参数提取出来作为对象的实现代码
Aug 16 Javascript
jquery easyui combobox模糊过滤(示例代码)
Nov 30 Javascript
JS删除字符串中重复字符方法
Mar 09 Javascript
JavaScript中push(),join() 函数 实例详解
Sep 06 Javascript
js/jq仿window文件夹框选操作插件
Mar 08 Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 Javascript
浅谈gulp创建完整的项目流程
Dec 20 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
详解vue中移动端自适应方案
May 05 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 Javascript
vue引入静态js文件的方法
Jun 20 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的ASCII码转换类
2013/07/05 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
js实现表格筛选功能
2017/01/18 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python科学计算环境推荐——Anaconda
2014/06/30 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
简单实现Python爬取网络图片
2018/04/01 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Sanic框架流式传输操作示例
2018/07/18 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
python 画条形图(柱状图)实例
2020/04/24 Python
python软件都是免费的吗
2020/06/18 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
普罗米修斯教学反思
2014/02/06 职场文书
企业文明单位申报材料
2014/05/16 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
实习计划书范文
2015/01/16 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书