DOM操作(未完待续)


API和 Web API

1.API是为程序员提供的一个接口,帮助我们实现某种功能

2.Web API是浏览器提供的一套操作浏览器和页面元素的API(BOM和DOM)

3.Web API主要是针对浏览器提供的接口,主要针对浏览器做交互效果

4.Web API一般都有输入和输出(函数的传参和返回值),Web API很多都是方法(函数)

DOM元素的查找方式

getElementById()

根据元素id获取 document.getElementById(id属性值)

结果是唯一的

你好世界

getElementsTagName()

根据标签名获取 document.getElementsByTagName(标签名)

结果也是一个html元素集合 HTMLCollection() ,伪数组形式,通过下标访问具体的元素

锻炼看 === 类名1

锻炼看 =----= 类名2

getElementsByClassName()

根据类名获取元素 document.getElementsByClassName(类名)

  1. 结果是一个html元素集合,HTMLCollection(4) ,是一个伪数组 通过下标访问具体的某个html元素 ; 如果结果只有一个值,也是通过下标的形式访问

锻炼看 === 类名1

锻炼看 =----= 类名2

锻炼看 == 类名3



用户名

getElementsByName()

通过name属性值查找 document.getElementsByName(name属性值);

结果是节点集合 NodeList [input.ipt] 伪数组形式 通过下标访问元素

querySelector()

查找的是第一个匹配的元素,结果是唯一的 document.querySelector(选择器)



用户名

querySelectorAll()

查找所有的元素 document.querySelectorAll(选择器)

结果是 节点集合对象 NodeList(5) 伪数组形式 通过下标访问元素

锻炼看 id查找

锻炼看

锻炼看 === 类名1

锻炼看 =----= 类名2

锻炼看 == 类名3

DOM操作

DOM树

image-20220413155014363

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

自定义属性操作

获取属性

??element.属性名

??getAttribute(属性名)

??: 可以获取自定义属性

 

属性操作

??element.属性与element.getAttribute('属性')的区别

  • 两者都是用来获取元素属性的

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

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

??domObj.attributes

获取标签所有的属性, 结果是属性集合, 伪数组形式

  • 获取标签所有的属性
  • 获取标签所有的属性
  • 获取标签所有的属性
  • 获取标签所有的属性

H5获取自定义属性

H5规定自定义date-开头的属性名并赋值

dataset是一个集合里面存放了所有以date开头的自定义属性

console.log(div.dataset);
console.log(div.dataset.index);
console.log(div.dataset['index']);

如果自定义属性里面有多个-连接的单词,我们获取的时候采取驼峰命名法

console.log(div.dataset.listName);
console.log(div.dataset['listName']);

设置属性

??element.属性名 = '值'

??setAttribute('属性名', '属性值')

  • 设置标签的属性(给标签添加属性并赋值)

  • 主要针对自定义属性

添加属性设置属性

image-20220413163011844

移除属性

??removeAttribute('属性名')

删除标签的属性

删除属性

image-20220413163623931

元素内容的操作

innerText :

不能识别标签 纯文本操作

hello

床前明月光

李白地上躺

innerHtml:

添加并替换标签的内容(html结构);可以识别标签

hello

赋值 替换操作 用指定的内容替换原本的内容

床前明月光

李白地上躺

outerHtml:

outerHTML : 类似于innerHTML, 区别在于包含标签自身

元素样式的操作

element.style 行内样式操作

element.clsssName 类名样式操作

操作类名

操作标签的类名 classList 类名集合对象

obj.classList 获取类名集合 伪数组形式

classList 类名集合对象

添加/删除类名

obj.classList.add()

obj.classList.remove()

classList 类名集合对象

判断类名是否存在

obj.classList.contains()

判断是否存在某个类名 obj.contains(类名) 结果是一个布尔值, true 存在 , false 不存在

classList 类名集合对象

自动切换类名

obj.classList.toggle()


节点操作

利用节点层级关系获取元素

  • 网页中所有内容(标签,属性,文本,注释)都是节点,节点使用node 来表示

  • 利用父子兄节点关系获取元素

  • 逻辑性强,但是兼容相差

节点至少有nodeType(节点类型),nodeName(节点名称)和nodeValue(节点值)这三个基本属性

  • 元素节点 nodeType 为 1
  • 属性节点 nodeType 为 2
  • 文本节点 nodeType 为 3 (文本节点包含文字,空格,换行)

父节点操作

1.父级节点 node.parentNode

2.parentNode 属性可返回某节点的父节点,注意是最近的一个父节点

3.如果指定的节点没有父节点则返回null

×

子节点操作

parentNode.childNodes(标准)

  • parentNode.childNodes 返回包含指定节点的子节点集合,该集合为即时更新的集合

parentNode.children(非标准)

  • parentNode.children 是一个只读属性,返回所有的子元素节点,它只返回子元素节点,其余节点不返回
  • 我是li
  • 我是li
  • 我是li
  • 我是li

parentNode.firstChild

返回第一个第一个子节点,找不到则返回null,同样也是包含所有的节点

parentNode.lastChild

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

parentNode.firstElementChild (IE9以上)

返回第一个子元素节点

parentNode.lastElementChild (IE9以上)

返回最后一个子元素节点

  1. 我是li1
  2. 我是li2
  3. 我是li3
  4. 我是li4
  5. 我是li5

兄弟节点操作

node.nextSilbling

node.nextSilbling 返回当前元素的下一个兄弟节点,找不到则返回null,同样,也是包含所有的节点

node.previousSibling

node.previousSibling 返回当前元素的下一个兄弟节点,找不到则返回null,同样也是包含所有的节点

node.nextElementsibling

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