DOM基础笔记

Document Object Model(DOM)是 文档对象模型。

DOM的本质

DOM是浏览器从HTML文件解析出来的一种树。

 

DOM节点操作

获取DOM节点

HTML5之前

  • document.getElementById(); 获取某个id的单个元素。
  • document.getElementByTagName(); 获得某tag元素的集合

HTML5新增

  • document.getElementByClassName(); 获得某类元素的集合
  • document.querySelector(); CSS选择器,返回选择到的第一个对象
  • document.querySelectorAll(); CSS选择器,返回选择器选择到的所有对象

获取特殊元素<body>, <html>

document.body;

document.documentElement;

 

DOM事件基础

事件是触发响应的机制。

事件的三要素: 事件源,事件类型,事件处理程序

  • 事件源是事件被触发的对象,如指定的按钮,div等
  • 事件类型是事件的触发方式,如鼠标事件,滚轮事件,键盘事件
  • 事件处理程序 -- 回调函数

事件执行过程

  1. 获取事件源
  2. 绑定/注册事件
  3. 添加回调函数

操作元素的方式

前置内容-H5自定义属性的规范

自定义属性的命名: data-属性名

element.dataset.属性名: 所有‘data-’ 开头的属性

修改元素内容

element.innerText 某元素标签内部文本的值

element.innerHTML 某元素内HTML代码的值,识别HTML标签

获取元素属性

element.属性; 这个只能获取默认属性

element.getAttribute(属性); 这个可以获得默认属性以及自定义的属性(推荐)

修改元素属性

img.src = 'imgs/me.png'; 其它属性同理

element.setAttribute(属性,值); 设置或者添加属性(推荐)

移除元素属性

element.removeAttribute(属性);

修改表单属性

input.value = '';

input.disabled = true;

修改CSS样式

element.style.border = “solid 1px black”; 修改行内样式,权重高于内嵌样式,一次只能修改一个属性

element.className = "new-class";  在开头css定义个新的new-class样式,这样就可以通过改变元素class来修改大量样式属性

 

节点操作:整个页面的所有内容都是节点

方法1:

利用DOM提供的方法获取元素

方法2(常用):

通过父元素获取子元素进行操作

节点有三个基本属性,包括nodeType, nodeName, nodeValue。

  • 元素节点的nodeType为1
  • 属性节点的nodeType为2
  • 文本节点的nodeType为3

节点层级

获取元素上一级的父节点

node.parentNode

 

获取元素的子节点: 包括元素节点和文本节点

node.childNodes

为了获取所有的元素节点,过滤掉文本节点

用for循环遍历子节点,获取 nodeType==1的节点

或者直接用 node.children(常用)获取所有的子元素

获取兄弟节点

node.nextSibling 获取下一个兄弟节点

node.previousSibling 获取上一个兄弟节点

node.nextElementSibling 获取下一个兄弟元素节点 IE9以上

node.previousElementSibling 获取上一个兄弟元素节点 IE9以上

 

创建节点

let div = document.createElement('div');

添加子节点到末尾

node.appendChild(div);

添加子节点到指定元素前面

node.insertBefore(div, 指定元素);

删除节点

如果删除按钮是要删除的元素的子节点,就让爷爷删除父节点

 

document.write(), createElement()和 innerHTML创建元素的区别

  • document.write() 它是直接将内容写入页面的内容流,在文档流执行完后,导致页面全部重绘
  • innerHTML 是将内容写入操作的DOM节点里,不会导致全部重绘,但是直接拼接字符串效率很低,用数组的join方法拼接字符串后执行效率非常高
  • createElement() 效率中等,但是结构清晰

 

posted @ 2021-01-04 11:02  SvenWayne  阅读(102)  评论(0)    收藏  举报