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 相关文章推荐
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
JavaScript将相对地址转换为绝对地址示例代码
Jul 19 Javascript
纯javascript制作日历控件
Jul 17 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
Jan 19 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
利用NPM淘宝的node.js镜像加速nvm
Mar 27 Javascript
js获取浏览器的各种属性
Apr 27 Javascript
详解Vue双向数据绑定原理解析
Sep 11 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
Dec 14 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
Jun 24 jQuery
游戏开发中如何使用CocosCreator进行音效处理
Apr 14 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连接access数据库方法
2013/11/11 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
tab栏切换原理
2017/03/22 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
ajax请求data遇到的问题分析
2018/01/18 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
商场中秋节活动方案
2014/02/07 职场文书
学习方法演讲稿
2014/05/10 职场文书
推广普通话演讲稿
2014/05/23 职场文书
选秀节目策划方案
2014/06/06 职场文书
团代会闭幕词
2015/01/28 职场文书
2015年父亲节寄语
2015/03/23 职场文书
写给女朋友的保证书
2015/05/09 职场文书