JavaScript DOM初学笔记

Stella981
• 阅读 743

1. DOM简介

1. 1 什么是DOM

文档对象模型Document Object Model,简称 DOM),是 W3C组织推荐的处理可扩展标记语言(HTML 或者标准编程接口。

1.2 DOM树

JavaScript DOM初学笔记

文档:一个页面就是一个文档,DOM中使用 document 表示
元素:页面中的所有标签都是元素,DOM 中使用 element 表示
节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node 表示

DOM 把以上内容都看做是对象

2. 获取元素

2.1 根据ID获取

document.getElementById('id');

使用 console.dir() 可以打印我们获取的元素对象,更好的查看对象里面的属性方法

2.2 根据标签名获取

document.getElementsByTagName('标签名'); 

得到的是一个对象的集合(伪数组)

element.getElementsByTagName('标签名'); 

父元素必须是单个对象(必须指明是哪一个元素对象)。获取的时候不包括父元素自己

2.3 根据HTML5 新增的方法获取

document.getElementsByClassName(‘类名’);// 根据类名返回元素对象集合 

document.querySelector('选择器');  // 根据指定选择器返回第一个元素对象 

document.querySelectorAll('选择器');  // 根据指定选择器返回 

querySelectorquerySelectorAll里面的选择器需要加符号

比如:document.querySelector('#nav');

2.4 获取特殊元素(body,html)

doucumnet.body // 返回body元素对象 

document.documentElement // 返回html元素对象 

3. 事件基础

3.1 事件三要素

  1. 事件源 (谁)
  2. 事件类型 (什么事件)
  3. 事件处理程序 (做啥)

3.2 鼠标事件

JavaScript DOM初学笔记

4. 操作元素

4.1 改变元素内容

element.innerText

从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去掉

element.innerHTML

起始位置到终止位置的全部内容,包括 html 标签,同时保留空格和换行

4.2 常用元素的属性操作

1. innerText、innerHTML 改变元素内容2. src、href3. id、alt、title

4.3 表单元素的属性操作

type、value、checked、selected、disabled 

4.4 样式属性操作

element.style  行内样式操作

element.className 类名样式操作

JS 里面的样式采取驼峰命名法 比如 fontSize、 backgroundColor
JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高
className 会直接更改元素的类名,会覆盖原先的类名

4.5 总结

JavaScript DOM初学笔记

4.6 自定义属性的操作

4.6.1 获取属性值

element.属性   // 获取内置属性值(元素本身自带的属性)

element.getAttribute('属性');  // 主要获得自定义的属性(标准),程序员自定义的属性

4.6.2 设置属性值

element.属性 = '值'   // 设置内置属性值

element.setAttribute('属性', '值');   // 主要设置自定义的属性(标准)

4.6.3 移除属性

element.removeAttribute('属性');   // 自定义的属性

4.7 H5自定义属性

4.7.1 设置属性

(1)H5规定自定义属性**data-**开头做为属性名并且赋值

<div data-index="1"></div>

(2)使用 JS 设置

element.setAttribute(‘data-index’, 2)

4.7.2 获取属性

(1)兼容性获取

element.getAttribute(‘data-index’);

(2)H5新增

element.dataset.index

element.dataset['index']  // ie 11才开始支持 

5. 节点操作

5.1 节点概述

元素节点 nodeType 为 1
属性节点 nodeType 为 2
文本节点 nodeType 为 3 (文本节点包含文字、空格、换行等)
我们在实际开发中,节点操作主要操作的是元素节点

5.2 节点层级

5.2.1 父级节点

node.parentNode

parentNode 属性可返回某节点的父节点,注意是最近的一个父节点
如果指定的节点没有父节点返回 null

5.2.2 子节点

1. parentNode.childNodes(标准)  // 不提倡

返回包含指定节点的子节点的集合,该集合为即时更新的集合,包含了所有的子节点,包括元素节点,文本节点等

2. parentNode.children(非标准)  // 各个浏览器支持

只读属性,返回所有的子元素节点,它只返回子元素节点,其余节点不返回

第一个子元素节点:parentNode.chilren[0]

最后一个子元素节点:parentNode.chilren[parentNode.chilren.length - 1]


3. parentNode.firstChild

返回第一个子节点,找不到则返回null。包含所有的节点

4. parentNode.lastChild

返回最后一个子节点,找不到则返回null。包含所有的节点

5. parentNode.firstElementChild  // IE9 以上才支持

返回第一个子元素节点,找不到则返回null

6. parentNode.lastElementChild  // IE9 以上才支持

返回最后一个子元素节点,找不到则返回null

5.2.3 兄弟节点

1. node.nextSibling

返回当前元素的下一个兄弟节点,找不到则返回null。包含所有的节点

2. node.previousSibling

返回当前元素的上一个兄弟节点,找不到则返回null。包含所有的节点

3. node.nextElementSibling    // IE9 以上才支持

返回当前元素下一个兄弟元素节点,找不到则返回null

4. node.previousElementSibling   // IE9 以上才支持

返回当前元素上一个兄弟元素节点,找不到则返回null

5.3 创建节点

document.createElement('tagName')

创建由 tagName 指定的 HTML 元素。因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点

5.4 添加节点

1. node.appendChild(child)

将一个节点添加到指定父节点的子节点列表末尾。类似于 CSS 里面的 after 伪元素

2. node.insertBefore(child, 指定元素) 

将一个节点添加到父节点的指定子节点前面。类似于 CSS 里面的 before 伪元素

5.5 删除节点

node.removeChild(child)

从 DOM 中删除一个子节点,返回删除的节点

5.6 克隆节点

node.cloneNode()

如果括号参数为或者为 false ,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点

如果括号参数为 true ,则是深度拷贝,会<.........

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皮卡皮卡皮 皮卡皮卡皮
3年前
javaScript. Dom 基本操作
DOM节点查找jsdocument.getElementById()//通过id查找document.getElementsByTagName()//通过标签名document.getElementsByName()//通过name名查找document.getElementsByClassName("类名")//通过类名获取元素对象documen
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这