js重磅内容--DOM学习

发布于:2023-01-05 ⋅ 阅读:(203) ⋅ 点赞:(0)

1. 什么是DOM?

文档对象模型(DOM),全称为 “文档对象模型”(Document Object Model),js组成部分之一,描述处理网页内容的方法和接口。它的作用是将网页转换为一个js对象,从而可以用脚本进行各种操作(比如增删内容)。

DOM是网页的编程接口。它给文档(结构树)提供了一个结构化的表诉并且定义了一种方式–程序可以对结构树进行访问,以改变文档的内容,样式和内容。

1.1. 节点层级

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

节点解析图:
在这里插入图片描述

其中,document节点表示每个文档的根节点。在这里,根节点的唯一子节点是元素,我们称之为文档元素(documentElement)。文档元素是文档最外层的元素,所有其他元素都存在于这个元素之内。每个文档只能有一个文档元素。在 HTML 页面中,文档元素始终是元素。

1.2 节点

DOM的最小组成单位叫做节点(node)。 文档的树形结构(DOM树),就是各种不同类型的节点组成。每个节点可以看成是文档树的一片叶子。
节点的类型有7种:Document、DocumentType、Element、Text、Comment、DocumentFragment。

常用节点:

  • 文档节点(document)
    整个HTML文档document对象作为window对象的属性存在的,我们不用获取可以直接使用。
  • 元素节点(Element)
    HTML文档中的HTML标签
  • 属性节点(Attribute)
    元素的属性,表示的是标签中的一个一个的属性,这里要注意的是属性节点并非是元素节点的子节点,而是元素节点的一部分
  • 文本节点(Text)
    HTML标签中的文本内容。

其他节点:

  • DocumentType
    doctype标签(比如<!DOCTYPE html>)。
  • Comment
    注释
  • DocumentFragment
    文档的片段

以上7种节点都属于浏览器原生提供的节点对象的派生对象,具有一些共同的属性和方法。

1.3 节点树

DOM树状结构图:
在这里插入图片描述
最顶层的节点就是document节点,它代表了整个文档。文档里面最高的HTML标签,一般是<html>,它构成树结构的根节点(root node),其他HTML标签节点都是它的下级。

除了根节点以外,其他节点对于周围的节点都存在三种关系。

  • 父节点关系(parentNode):直接的那个上级节点。
  • 子节点关系(childNode):直接的下级节点。
  • 同级节点关系(sibling):拥有同一父节点的节点。

2. Node类型

Node 接口在 JavaScript中被实现为 Node 类型,在除 IE之外的所有浏览器中都可以直接访问这个类型。在 JavaScript中,所有节点类型都继承 Node 类型,因此所有类型都共享相同的基本属性和方法。

2.1 Node节点属性

  1. nodeType
    nodeType属性返回一个整数值,表示节点的类型,常用节点类型如下:
节点类型 对应常量
文档节点(document) 9 Node.DOCUMENT_NODE
元素节点(element) 1 Node.ELEMENT_NODE
<script>
  console.log(document.nodeType); //9
  var container = document.getElementById("container")
  console.log(container.nodeType); // 1
</script>
  1. nodeName
  2. nodeValue
  3. textContent
  4. nextSibling
  5. previousSibling
  6. parentNode
  7. parentElement
  8. firstChild和lastChild
  9. childNodes

2.2 Node节点常用操作方法

  1. appendChild()
    appendChild方法接受一个节点对象作为参数,将其作为最后一个子节点,插入当前节点。该方法的返回值就是插入文档的子节点。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    #container{
      width: 200px;
      height: 200px;
      background-color: chocolate;
    }
  </style>
</head>
<body>
  <div id="container"></div>
  <script>
    var container =document.getElementById('container')
    //appendChild()
    //新建一个节点
    var a = document.createElement('a')
    // //给新节点设置内容
    a.innerHTML ='a标签'
    // //appendChild 将子节点添加到目标节点中
    // //父容器.appendChild(子节点)
    container.appendChild(a)
  </script>
</body>
</html>

页面效果:
在这里插入图片描述

  1. insertBefore()
    insertBefore方法用于将某个节点插入父节点内部的指定位置。

var insertedNode = parentNode.insertBefore(newNode, referenceNode);

insertBefore方法接受两个参数:第一个参数是所要插入的节点newNode,第二个参数是父节点parentNode内部的一个子节点referenceNode(位置参考节点)。newNode将插在referenceNode这个子节点的前面。返回值是插入的新节点newNode
在上诉案例中添加代码

 //新建一个节点
var span1 = document.createElement('span')
//设置节点内容
span1.innerHTML = "我是一个span标签"
//在container之前插入一个span标签
document.body.insertBefore(span1,container)

页面效果:
在这里插入图片描述

  1. removeChild()
    removeChild方法接受一个子节点作为参数,用于从当前节点移除该子节点。返回值是移除的子节点。
//removeChild()
//删除a标签
container.removeChild(a)

页面效果:
在这里插入图片描述

  1. replaceChild()
    replaceChild方法用于将一个新的节点,替换当前节点的某一个子节点。

var replacedNode = parentNode.replaceChild(newChild, oldChild);

replaceChild方法接受两个参数,第一个参数newChild是用来替换的新节点,第二个参数oldChild是将要替换走的子节点。返回值是替换走的那个节点oldChild。
在上述代码中添加代码:

  //replaceChild()
    var p = document.createElement('p')
    p.innerHTML="这是一个段落标签"
    document.body.replaceChild(p,span1)

页面效果:
在这里插入图片描述
5. 其他方法
cloneNode()
方法返回调用该方法的节点的一个副本。

var dupNode = node.cloneNode(deep);

node:将要被克隆的节点
dupNode:克隆生成的副本节点
deep: 可选,是否采用深度克隆,如果为true,则该节点的所有后代节点也都会被克隆,如果为false,则只克隆该节点本身。

    // 克隆
    var container2 =container.cloneNode(true);
    //将克隆后的节点添加到页面结构中
    document.body.appendChild(container2)

3. Document类型

3.1 Document属性

属性 描述
documentElement 始终指向HTML页面中的元素。
body 直接指向元素
doctype 访问<!DOCTYPE>, 浏览器支持不一致,很少使用
title 获取文档的标题
url 取得完整的URL
domain 取得域名,并且可以进行设置,在跨域访问中经常会用到。
referrer 取得链接到当前页面的那个页面的URL,即来源页面的URL。
images 获取所有的img对象,返回HTMLCollection类数组对象
forms 获取所有的form对象,返回HTMLCollection类数组对象
links 获取文档中所有带href属性的元素

3.2. 查找元素的方法

方法 描述
document.getElementById(id) 通过元素 id 来查找元素
document.getElementsByTagName(name) 通过标签名来查找元素
document.getElementsByClassName(name) 通过类名来查找元素
document.querySelector() 返回文档中匹配指定的CSS选择器的第一个元素
document.querySelectorAll() document.querySelectorAll() 是 HTML5中引入的新方法,返回文档中匹配的CSS选择器的所有元素节点列表

3.3. 添加元素

document.createElement(element)

创建一个新的HTML元素,要与appendChild() 或 insertBefore()方法联合使用。其中,appendChild() 方法在节点的子节点列表末添加新的子节点。insertBefore() 方法在节点的子节点列表任意位置插入新的节点。

<script>
  // 创建元素节点p
  var p = document.createElement('p');
  // 向p标签插入内容
  p.innerHTML = '我是一个p标签';
  // 将节点插入到body中
  document.body.appendChild(p);
</script>

3.4. 写入

document.write()
向文档写入文本或 HTML 表达式 或 JavaScript 代码。

<script>
  document.write("<p>Hello world!</p>");
  document.write("<span>Hello DOM!</span>");
  document.write("Hello Weekend!");
</script>

4. Element类型

4.1 属性

attributes:返回一个与该元素相关的所有属性的集合。
classList:返回该元素包含的 class 属性的集合。
className:获取或设置指定元素的 class 属性的值。
clientHeight:获取元素内部的高度,包含内边距,但不包括水平滚动条、边框和外边距。
clientTop:返回该元素距离它上边界的高度。
clientLeft:返回该元素距离它左边界的宽度。
clientWidth:返回该元素它内部的宽度,包括内边距,但不包括垂直滚动条、边框和外边距。
innerHTML:设置或获取 HTML 语法表示的元素的后代。
tagName:返回当前元素的标签名。

4.2 常用方法

方法 描述
element.innerHTML = new html content 改变元素的文本内容
element.attribute = value 修改属性的值
element.getAttribute() 返回元素节点的指定属性值。
element.setAttribute(attribute, value) 设置或改变 HTML 元素的属性值
element.style.property = new style 改变 HTML 元素的样式

5. Text类型

Text 节点由 Text 类型表示,包含按字面解释的纯文本,也可能包含转义后的 HTML 字符,但不含 HTML 代码。

5.1属性及方法

length

​ 文本长度

appendData(text)

​ 追加文本

deleteData(beginIndex,count)

​ 删除文本

insertData(beginIndex,text)

​ 插入文本

replaceData(beginIndex,count,text)

​ 替换文本

splitText(beginIndex)

​ 从beginIndex位置将当前文本节点分成两个文本节点

document.createTextNode(text)

​ 创建文本节点,参数为要插入节点中的文本

substringData(beginIndex,count)

​ 从beginIndex开始提取count个子字符串

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到