DOM基本认识

185 阅读5分钟

基础认识

PS:

1、渲染的过程:动态数据 ------填充-----》静态结构

作用:

1、使用JS去操作HTML和浏览器,开发网页内容和实现用户交互

2、功能:能够改变页面中的所有 HTML 元素,能够改变页面中的所有 HTML 属性,能够改变页面中的所有 CSS 样式,能够对页面中的所有事件做出反应

分类:

1、DOM(文档对象模型)

2、BOM(浏览器对象模型)

概念

1、Document Object Model,用来呈现以及与任意HTML或XML文档交互的API

2、是浏览器提供的一门专门用来操作网页内容的功能

结构

1、DOM树

一、将HTML文档以树状结构直观的表现出来;

二、描述网页内容关系的名词

三、作用:文档树直观的体现了标签与标签之间的关系

根节点、元素节点、属性节点、文本节点

2、DOM对象

定义:浏览器根据HTML标签生成的JS对象,可查找、可修改

核心思想:将网页内容当做对象来处理

document对象:由DOM提供的一个对象,其属性与方法用来访问和操作网页内容,包含所有网页内容

获取DOM对象

1、精确查找选择页面中的标签元素

2、等等

一、根据CSS选择器获取DOM元素

CSS选择器分类:类选择、id选择、伪类选择、

选择第一个元素

语法:document.querySelector('css选择器')

参数:包含一个或多个有效的CSS选择器--------字符串

返回值:匹配到的第一个元素,一个HTMLElement对象,失败返回null

选择多个元素

语法:document.querySelectotAll('css选择器')

参数:包含一个或多个有效的CSS选择器-------字符串

返回值:CSS选择匹配的NodeList对象集合,失败返回空数组

1、NodeList对象中没有map方法与filter方法

2、NodeList为一个伪数组,有长度有索引,无法使用写的数组方法

代码实现:

//class名选择器
let mya = document.querySelector('.mya')
//id选择器
let myh2 = document.querySelector('#myh2')
//多个元素选择
let spanList = document.querySelectorAll('span')
console.log(spanList);
spanList.forEach((v,i)=>{
        console.log(v,i);
        v.style.color = 'red'
      })
//用法
let item = document.querySelectorAll('span')[index]
二、其他获取元素方式

1、根据id获取一个元素

document.getElementById('id')
//重名id 返回第一个元素,失败返回null

2、根据标签获取一类全部元素

document.getElementByTagName('tagName')
//返回伪数组,有长度索引,但不能使用数组方法
//失败返回空数组

3、根据类名获取所有元素

document.getElementByClassName('className')
//返回伪数组,有长度索引,但不能使用数组方法
//失败返回空数组

\4、DOM树里的唯一标签可以直接引用

let bodyItem = document.body
let htmlItem = document.html
let headItem = document.head
let footerItem = document.footer

点操作的对象为内置属性,自定义属性会忽略操作

常规标签 内置属性:

div p span: id class name style a: href img: src alt title input: type max min maxlength value id name class

只读状态:readonly >> input button 选中状态: checked >> radoi checkbox 选项选中状态: selected >> select 禁用状态:disabled >> input button

设置/修改DOM元素内容

一、修改标签元素里的内容

1、document.write()

只能将文本追加到的位置

文本内的标签会被解析

document.write(`我好憨`)

2、documentObject.innerText = str

将文本内容添加/更新到指定标签位置

文本标签不会被解析

不赋值则取值,只返回文本内容

let INFO = document.getElementById('info')
INFO.innerText = '<p>我好憨</p>'

3、documentObject.innerHTML = str

将文本内容添加/更新到指定标签位置

文本包含的标签会被解析,

不赋值则取值,取包括HTML标签在内的所有内容

注意补充转义字符的使用:当解析标签内含有不解析标签字符的解决方法

let INFO = document.getElementById('info')
INFO.innerHTML = '<h3>我好憨</h3>'

inner方法会对原有内容进行覆盖,

innerText不能获取单标签即input表单内的输入文本域内容

设置/修改DOM元素属性

添加 修改常用属性

例如:修改href、title、src等

//对象.属性 = 值
let pic = document.querySelector('img')
pic.src = './images/b02.jpg'
pic.title = '这是一个图片'
添加 修改元素样式属性

例如:通过轮播图小圆点自动更换颜色样式,滚动图片

1、通过style属性操作css

PS:

1、修改样式通过style属性引出

2、如果属性有-连接符,需要转换为小驼峰命名法

3、赋值的 value 要加上必要单位

documentObject.style.css = value

2.操作类名className操作css

用className代替class关键字

className 直接赋值是覆盖原有的,添加需要连接

documentObject.className = '类名'
//className含标签对象的全部类
domObj.className = `${domObj.className} mydiv`

3、通过classList操作类控制Css

解决clasName 容易覆盖以前类名,通过classList追加

不影响原有类名

classList返回的是:一个包含元素的类名列表

//在元素中添加一个或多个类名。
//如果指定的类名已存在,则不会添加
documentObject.classList.add('类名')
//移除元素中一个或多个类名
//移除不存在的类名,不会报错
documentObject.classList.remove('类名')
//切换一个类?
//toggle(token: string, force?: boolean): boolean
//执行逻辑:token为类名,存在该类则移除并返回false,否则添加返回true,force为设置是否强制添加(true)/删除(false)
documentObject.classList.toggle('类名')
//查找类名,返回Boolean
documentObject.contain(class)
//根据索引查找类,返回类名,失败返回null
documentObject.item(索引)
设置 修改表单元素属性

获取:DOM对象.属性名

设置:DOM对象.属性名 = 新值

//属性数据类型只取Boolean,以表属性是否生效
class.disabled = true;
class.checked = false;
class.selected = true;

定时器----间歇函数

使用场景:间隔性地自动执行代码,倒计时

分类:间歇函数、任务函数

间歇函数
语法:setInterval(function,millise,lang)
参数:function执行函数语句,millise毫秒间隔数,lang可选的语言环境

function不需要加(),setInterval()返回的是一个id数字

操作对象:为window的定时器容器,类似于window.sessionStorage.getItem

id为定时器容器中的子元素----执行函数对象的索引下标

关闭定时器:clearInterval(var)

PS:clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值

//data接收的是id参数,typeof为number
let data = setInterval(fun,millise)
//clearInterval是停止容器内函数的执行,并不是清除该子元素
clearInterval(data)

\