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 相关文章推荐
javascript 中对象的继承〔转贴〕
Jan 22 Javascript
jQuery 获取对象 定位子对象
May 31 Javascript
JS关键字变色实现思路及代码
Feb 21 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
Jul 14 Javascript
js+css3制作时钟特效
Oct 16 Javascript
用jQuery实现圆点图片轮播效果
Mar 19 Javascript
Node.js 8 中的 util.promisify的详解
Jun 12 Javascript
js实现水平滚动菜单导航
Jul 21 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
vue 登录滑动验证实现代码
Aug 24 Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 Javascript
React forwardRef的使用方法及注意点
Jun 13 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极大的增强功能和性能
2006/10/09 PHP
PHP下MAIL的另一解决方案
2006/10/09 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
理解Python中的With语句
2016/03/18 Python
Python使用剪切板的方法
2017/06/06 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
详解Python做一个名片管理系统
2019/03/14 Python
python dataframe NaN处理方式
2019/12/26 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
聊聊python中的异常嵌套
2020/09/01 Python
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
本科毕业生自我鉴定
2013/11/02 职场文书
优秀员工表扬信
2014/01/17 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
开工仪式主持词
2014/03/20 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
就业协议书怎么填
2014/09/15 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
房屋买卖定金协议书
2016/03/21 职场文书