首页 > 其他分享 >DOM是什么?含12种DOM节点类型概述

DOM是什么?含12种DOM节点类型概述

时间:2024-06-05 23:33:17浏览次数:18  
标签:Node 12 nodeType nodeName DOM 元素 document 节点

 DOM是javascript操作网页的接口,全称为文档对象模型(Document Object Model)。它的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容)。浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组成一个树状结构。DOM的最小组成单位叫做节点(node),文档的树形结构(DOM树)由12种类型的节点组成。本文将主要说明DOM节点类型

介绍Html的DOM树:

说明:html标签通过浏览器的解析后才会形成dom树,此后HTML中的每个标签元素,属性,文本都能看做是一个DOM的节点,JavaScript都能通过dom的提供的编程接口操作到每个节点,了解浏览器的渲染机制能够帮助我们了解dom。

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>dom</title>
</head>
<body>
    <div>
        <a href="www.baidu.com">百度</a>
    </div>
</body>
</html>

 对应的DOM树结构图:

认识JavaScript中的DOM编程接口:

上面说了html形成的dom树,接着说下通过js的dom编程接口去操作这棵dom树。

JavaScriptDOM操作的常用方法和属性:

>常用方法:

  1. 获取节点:
    1. document.getElementById(idName)          //通过id号来获取元素,返回一个元素对象
    2. document.getElementsByName(name)       //通过name属性获取id号,返回元素对象数组
    3. document.getElementsByClassName(className)   //通过class来获取元素,返回元素对象数组(ie8以上才有)
    4. document.getElementsByTagName(tagName)       //通过标签名获取元素,返回元素对象数组
  2. 获取/设置元素的属性值:
    1. element.getAttribute(attributeName)     //括号传入属性名,返回对应属性的属性值
    2. element.setAttribute(attributeName,attributeValue)    //传入属性名及设置的值
  3. 创建节点Node:
    1. document.createElement("h3")       //创建一个html元素,这里以创建h3元素为例
    2. document.createTextNode(String); //创建一个文本节点;
    3. document.createAttribute("class"); //创建一个属性节点,这里以创建class属性为例
  4. 增添节点:
    1. element.appendChild(Node);   //往element内部最后面添加一个节点,参数是节点类型
    2. elelment.insertBefore(newNode,existingNode); //在element内部的中在existingNode前面插入newNode
  5. 删除节点:
    1. element.removeChild(Node)    //删除当前节点下指定的子节点,删除成功返回该被删除的节点,否则返回null

>常用属性:

  • 获取当前元素的父节点 :
    1. element.parentNode     //返回当前元素的父节点对象
  • 获取当前元素的子节点:
    1. element.chlidren        //返回当前元素所有子元素节点对象,只返回HTML节点
    2. element.chilidNodes   //返回当前元素多有子节点,包括文本,HTML,属性节点。(回车也会当做一个节点)
    3. element.firstChild      //返回当前元素的第一个子节点对象
    4. element.lastChild       //返回当前元素的最后一个子节点对象
  • 获取当前元素的同级元素:
    1. element.nextSibling          //返回当前元素的下一个同级元素 没有就返回null
    2. element.previousSibling   //返回当前元素上一个同级元素 没有就返回null
  • 获取当前元素的文本:
    1. element.innerHTML   //返回元素的所有文本,包括html代码
    2. element.innerText     //返回当前元素的自身及子代所有文本值,只是文本内容,不包括html代码
  • 获取当前节点的节点类型:node.nodeType   //返回节点的类型,数字形式(1-12)常见几个1:元素节点,2:属性节点,3:文本节点。
  • 设置样式:element.style.color=“#eea”;      //设置元素的样式时使用style,这里以设置文字颜色为例。

 DOM中的各种节点类型及其属性:

元素节点              Node.ELEMENT_NODE(1)
属性节点              Node.ATTRIBUTE_NODE(2)
文本节点              Node.TEXT_NODE(3)
CDATA节点             Node.CDATA_SECTION_NODE(4)
实体引用名称节点       Node.ENTRY_REFERENCE_NODE(5)
实体名称节点          Node.ENTITY_NODE(6)
处理指令节点          Node.PROCESSING_INSTRUCTION_NODE(7)
注释节点              Node.COMMENT_NODE(8)
文档节点              Node.DOCUMENT_NODE(9)
文档类型节点          Node.DOCUMENT_TYPE_NODE(10)
文档片段节点          Node.DOCUMENT_FRAGMENT_NODE(11)
DTD声明节点            Node.NOTATION_NODE(12)

DOM定义了一个Node接口,这个接口在javascript中是作为Node类型实现的,而在IE8-浏览器中的所有DOM对象都是以COM对象的形式实现的。所以,IE8-浏览器并不支持Node对象的写法

//在标准浏览器下返回1,而在IE8-浏览器中报错,提示Node未定义
console.log(Node.ELEMENT_NODE);//1

nodeName

  nodeName属性返回节点的名称

nodeValue

  nodeValue属性返回或设置当前节点的值,格式为字符串

  接下来,将按照节点类型的常数值对应顺序,从1到12进行详细说明

元素节点

  元素节点element对应网页的HTML标签元素。元素节点的节点类型nodeType值是1,节点名称nodeName值是大写的标签名,nodeValue值是null

  以body元素为例

// 1 'BODY' null
console.log(document.body.nodeType,document.body.nodeName,document.body.nodeValue)
console.log(Node.ELEMENT_NODE === 1);//true

特性节点

  元素特性节点attribute对应网页中HTML标签的属性,它只存在于元素的attributes属性中,并不是DOM文档树的一部分。特性节点的节点类型nodeType值是2,节点名称nodeName值是属性名,nodeValue值是属性值

  现在,div元素有id="test"的属性

<div id="test"></div>
<script>
var attr = test.attributes.id;
//2 'id' 'test'
console.log(attr.nodeType,attr.nodeName,attr.nodeValue)
console.log(Node.ATTRIBUTE_NODE === 2);//true    
</script>

文本节点

  文本节点text代表网页中的HTML标签内容。文本节点的节点类型nodeType值是3,节点名称nodeName值是'#text',nodeValue值是标签内容值

  现在,div元素内容为'测试'

<div id="test">测试</div>
<script>
var txt = test.firstChild;
//3 '#text' '测试'
console.log(txt.nodeType,txt.nodeName,txt.nodeValue)
console.log(Node.TEXT_NODE === 3);//true    
</script>

CDATA节点

  CDATASection类型只针对基于XML的文档,只出现在XML文档中,表示的是CDATA区域,格式一般为

<![CDATA[
]]>

  该类型节点的节点类型nodeType的值为4,节点名称nodeName的值为'#cdata-section',nodevalue的值是CDATA区域中的内容

实体引用名称节点

  实体是一个声明,指定了在XML中取代内容或标记而使用的名称。 实体包含两个部分, 首先,必须使用实体声明将名称绑定到替换内容。 实体声明是使用 <!ENTITY name "value"> 语法在文档类型定义(DTD)或XML架构中创建的。其次,在实体声明中定义的名称随后将在 XML 中使用。 在XML中使用时,该名称称为实体引用。

  实体引用名称节点entry_reference的节点类型nodeType的值为5,节点名称nodeName的值为实体引用的名称,nodeValue的值为null

//实体名称
<!ENTITY publisher "Microsoft Press">
//实体名称引用
<pubinfo>Published by &publisher;</pubinfo>

实体名称节点

  上面已经详细解释过,就不再赘述

  该节点的节点类型nodeType的值为6,节点名称nodeName的值为实体名称,nodeValue的值为null

处理指令节点

  处理指令节点ProcessingInstruction的节点类型nodeType的值为7,节点名称nodeName的值为target,nodeValue的值为entire content excluding the target

注释节点

    注释节点comment表示网页中的HTML注释。注释节点的节点类型nodeType的值为8,节点名称nodeName的值为'#comment',nodeValue的值为注释的内容

  现在,在id为myDiv的div元素中存在一个<!-- 我是注释内容 -->

<div id="myDiv"><!-- 我是注释内容 --></div>
<script>
var com = myDiv.firstChild;
//8 '#comment' '我是注释内容'
console.log(com.nodeType,com.nodeName,com.nodeValue)
console.log(Node.COMMENT_NODE === 8);//true    
</script>

文档节点

  文档节点document表示HTML文档,也称为根节点,指向document对象。文档节点的节点类型nodeType的值为9,节点名称nodeName的值为'#document',nodeValue的值为null

<script>
//9 "#document" null
console.log(document.nodeType,document.nodeName,document.nodeValue)
console.log(Node.DOCUMENT_NODE === 9);//true    
</script>

文档类型节点

  文档类型节点DocumentType包含着与文档的doctype有关的所有信息。文档类型节点的节点类型nodeType的值为10,节点名称nodeName的值为doctype的名称,nodeValue的值为null

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
var nodeDocumentType = document.firstChild;
//10 "html" null
console.log(nodeDocumentType.nodeType,nodeDocumentType.nodeName,nodeDocumentType.nodeValue);
console.log(Node.DOCUMENT_TYPE_NODE === 10);
</script>
</body>
</html>

文档片段节点

    文档片段节点DocumentFragment在文档中没有对应的标记,是一种轻量级的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。该节点的节点类型nodeType的值为11,节点名称nodeName的值为'#document-fragment',nodeValue的值为null

<script>
var nodeDocumentFragment = document.createDocumentFragment();    
//11 "#document-fragment" null
console.log(nodeDocumentFragment.nodeType,nodeDocumentFragment.nodeName,nodeDocumentFragment.nodeValue);
console.log(Node.DOCUMENT_FRAGMENT_NODE === 11);//true
</script>

DTD声明节点

  DTD声明节点notation代表DTD中声明的符号。该节点的节点类型nodeType的值为12,节点名称nodeName的值为符号名称,nodeValue的值为null

标签:Node,12,nodeType,nodeName,DOM,元素,document,节点
From: https://blog.csdn.net/qing_tong_tong/article/details/139478753

相关文章

  • 【软件插件】SketchUP插件-最新版坯子插件2024 v3.2.2(支持SketchUp2012-2024版本)安装
    下载链接:https://r0vr8xquwul.feishu.cn/docx/MXC5dUMZroLibaxYgZ3cmkyinDe详细图文教程:https://www.yuque.com/zhefengerhuanzaigua/bld6x5/kc2baq1msy6dehb3软件介绍坯子插件库是为SketchUp(草图大师)用户推出的一款插件管理工具,我们知道在使用sketchup进行模型设计的时候是......
  • 4.12
    今日完成的主要内容是有关于数据库的实验四的内容数据库的备份与恢复实验在用Windows身份验证进入SSMS后找到服务器对象,右键点击备份设备点击新建备份设备来新建一个备份设备 然后再右键点击新建的备份设备,点击备份数据库 在数据库中找到students数据库 在介质选项中的......
  • 【DRF-12】rest-framework之路由
    路由控制介绍:我们之前一直接触的路由是最基本的形式,就是我们下面介绍的第一种方式的自定义路由,无论是FBV还是CBV,都可以使用这用方式来设置路由来设定请求来的时候对应响应视图的函数或者视图类当我们使用封装了的视图类处理代码的时候,我们就可以使用对应的半自动路由......
  • 小米10ultra(IMX350 2000W) 小米11ultra(IMX586 4800W) 超广角放大对比 ISO12233
    拍摄距离ISO12233的打印纸大概半米,室内灯光环境结论:差距比较小,不过也是能看出来的。大概差半级到一级。10u能分辨到4,11u能分辨到4.5。小米10ultra质量:高HEICIMG_20240605_205122.HEIC1.29MB3880x5184 像素  小米11ultra质量:高没用HEIC用的jpgIMG_20240605_2......
  • JavaScript第十讲:DOM编程(1):节点概念,如何获取元素节点,节点属性,样式
    前言在当今的Web开发中,DOM(DocumentObjectModel)编程扮演着至关重要的角色。DOM是HTML和XML文档的编程接口,它使得我们可以像操作对象一样来操作网页上的元素。无论是构建动态网页,还是实现用户交互,都离不开对DOM的深入理解和灵活运用。在本文中,我们将开启DOM编程的系列学习之旅......
  • QOJ #1285.Stirling Number
    一道非常厉害的题目。题意求:\[\sum_{i=0}^{m}c(n,i)\modp\]其中\(c(n,i)\)为无标号第一类斯特林数,且有\(n,m\le10^{18},p\le10^6\)。Sol考虑一个性质:\[x^{\overlinep}\equivx^p-x\modp\]证明比较简单,考虑费马小定理,\(x^p\equivx\modp\)。而\(x,x+1,\cdots,x+......
  • 1123 舍入(测试点2,6,7,8)
    solution注意负号的取舍以及进位只有舍入后非零的负数才会输出负号可能有多位进位,用高精度加法测试点2,6:整数13188.000测试点7:多次进位1339.999910.000测试点8:舍入后全0的负值133-0.00000000010.000#include<iostream>#include<string>usi......
  • C++Primer Plus第十二章程序清单12.1~12.3一个失败的例子分析
    12.1.2特殊成员函数StringBad类的问题是由特殊成员函数引起的。这些成员函数是自动定义的,就StringBad而言,这些函数的行为与类设计不符。具体地说,C++自动提供了下面这些成员函数:1,默认构造函数,如果没有定义构造函数;2,默认析构函数,如果没有定义;3,复制构造函数,如果没有......
  • android12 Settings 添加导航栏和状态栏开关
    平台RK3568,android12添加导航栏和状态栏的开关。 通过设置系统属性来默认系统关闭导航栏和状态栏。Index:device/rockchip/rk356x/device.mk===================================================================---device/rockchip/rk356x/device.mk(revision2442......
  • C# 12 new feature Collection Expression,Primary Consctructor,Generic type alias,
    usinglistOfInt=System.Collections.Generic.List<int>;namespaceConsoleApp36{internalclassProgram{staticvoidMain(string[]args){GenericTypeAlias();}staticvoidGenericTypeAlias()......