【前端】对前端小白极为友好的JS DOM入门文章

在这里插入图片描述

在现代web开发中,JavaScript (JS) 是不可或缺的一部分,它使我们能够为网页赋予交互性和动态性。其中,DOM(文档对象模型)技术在前端开发中起着至关重要的作用。本篇博客将带领前端初学者深入理解JavaScript DOM技术,为你构建坚实的基础。

1. DOM简介

1.1 什么是DOM

文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展置标语言的标准编程接口。DOM 把整个页面映射为一个多层的节点结构,HTML 或 XML 页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。

W3C DOM 由以下三部分组成:

  • 核心 DOM – 针对任何结构化文档的标准模型
  • XML DOM – 针对 XML 文档的标准模型
  • HTML DOM – 针对 HTML 文档的标准模型

通过 DOM 接口,应用程序可以在任何时候访问文档中的任何一部分数据,因此,这种利用 DOM 接口的机制也被称作随机访问机制。

在这里插入图片描述

1.2 DOM级别

DOM0

DOM0(即第 0 级 DOM),实际上指的是未形成标准的试验性质的初级阶段的 DOM。由于 DOM0 在 W3C 进行标准备化之前出现,还处于未形成标准的初期阶段,这时 Netscape 和 Microsoft 各自推出自己的第四代浏览器,自此 DOM 便开始出现各种问题。

DHTML

DHTML 是 Dynamic HTML(动态 HTML)的简称。DHTML 并不是一项新技术,而是将 HTML、CSS、JavaScript 技术组合的一种描述。即:

  • 利用 HTML 把网页标记为各种元素
  • 利用 CSS 设置元素样式及其显示位置
  • 利用 JavaScript 操控页面元素和样式

利用 DHTML,看起来可以很容易的控制页面元素,并实现原本很复杂的效果(如:通过改变元素位置实现动画)。但事实并非如此,因为没有规范和标准,两种浏览器对相同功能的实现的确完全不一样。为了保持程序的兼容性,程序员必须写一些探查代码以检测 JavaScript 是运行于哪种浏览器之下,并提供与之对应的脚本。JavaScript 陷入了前所未有的混乱,DHTML 也因此在人们心中留下了很差的印象。

DOM1

在浏览器厂商进行浏览器大战的同时,W3C 结合各厂商的优点推出了一个标准化的 DOM,并于 1998 年 10 月完成了第一级 DOM,即:DOM1。W3C 将 DOM 定义为一个与平台和编程语言无关的接口,通过这个接口程序和脚本可以动态的访问和修改文档的内容、结构和样式。

DOM1 级主要定义了 HTML 和 XML 文档的底层结构。在 DOM1 中,DOM 由两个模块组成:

  • DOM Core(DOM 核心):规定了基于 XML 的文档结构标准,通过这个标准简化了对文档中任意部分的访问和操作。
  • DOM HTML:则在 DOM 核心的基础上加以扩展,添加了针对 HTML 的对象和方法,如:JavaScript 中的 Document 对象。

DOM2

在 DOM1 的基础上 DOM2 引入了更多的交互能力,也支持了更高级的 XML 特性。DOM2 将 DOM 分为更多具有联系的模块。DOM2 级在原来 DOM 的基础上又扩充了鼠标、用户界面事件、范围、遍历等细分模块,而且通过对象接口增加了对 CSS 的支持。DOM1 级中的 DOM 核心模块也经过扩展开始支持 XML 命名空间。在 DOM2 中引入了下列模块,在模块包含了众多新类型和新接口:

  • DOM 视图(DOM Views):定义了跟踪不同文档视图的接口
  • DOM 事件(DOM Events):定义了事件和事件处理的接口
  • DOM 样式(DOM Style):定义了基于 CSS 为元素应用样式的接口
  • DOM 遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口

DOM3

DOM3 级:进一步扩展了 DOM,引入了以统一方式加载和保存文档的方法,它在 DOM Load And Save 这个模块中定义;同时新增了验证文档的方法,是在 DOM Validation 这个模块中定义的。 DOM3 进一步扩展了 DOM,在 DOM3 中引入了以下模块:

  • DOM 加载和保存模块(DOM Load and Save):引入了以统一方式加载和保存文档的方法
  • DOM 验证模块(DOM Validation):定义了验证文档的方法
  • DOM 核心的扩展(DOM Style):支持 XML 1.0 规范,涉及 XML Infoset、XPath 和 XML Base

1.3 文档类型

我们说 DOM 文档对象模型是从文档中抽象出来的,DOM 操作的对象也是文档,因此我们有必要了解一下文档的类型。文档随着历史的发展演变为多种类型,如下:

文档类型发展史

GML

GML(Generalized Markup Language,通用标记语言)是 1960 年代的一种 IBM 文档格式化语言,用于描述文档的组织结构、各部件及其相互关系。GML 在文档具体格式方面,为文档员提供了一些方便,他们不必再为 IBM 的打印机格式化语言 SCRIPT 要求的字体规范、行距以及页面设计等浪费精力。这个 IBM 的 GML 包括 1960 年代的 GML 和 1980 年代的 ISIL。

SGML

SGML(Standard Generalized Markup Language,标准通用标记语言)是 1986 年基于 IBM 的 GML 制定 ISO 标准(ISO 8879)。SGML 是现时常用的超文本格式的最高层次标准,是可以定义标记语言的元语言,甚至可以定义不必采用 “” 的常规方式。由于 SGML 的复杂,因而难以普及。HTML 和 XML 同样衍生于 SGML,XML 可以被认为是 SGML 的一个子集,而 HTML 是 SGML 的一个应用。

HTML

HTML(HyperText Markup Language,超文本标记语言)是为“网页创建和其它可在网页浏览器中看到的信息”设计的一种标记语言。HTML 被用来结构化信息——例如标题、段落和列表等等,也可用来在一定程度上描述文档的外观和语义。1982 年,蒂姆·伯纳斯-李为使世界各地的物理学家能够方便的进行合作研究,创建了使用于其系统的 HTML。之后 HTML 又不断地扩充和发展,成为国际标准,由万维网联盟(W3C)维护。第一个正式标准是 1995 年发布的 RFC 1866(HTML 2.0)。

XML

XML(eXtensible Markup Language,可扩展标记语言)是专家们使用 SGML 精简制作,并依照 HTML 的发展经验,产生出一套使用上规则严谨,但是简单的描述数据语言。XML 在 1995 年开始有雏形,在 1998 二月发布为 W3C 的标准(XML1.0)

XHTML

XHTML(eXtensible HyperText Markup Language,可扩展超文本标记语言)的表现方式与超文本标记语言(HTML)类似,不过语法上更加严格。从继承关系上讲,HTML 是一种基于标准通用标记语言(SGML)的应用,是一种非常灵活的置标语言,而 XHTML 则基于可扩展标记语言(XML),XML 是 SGML 的一个子集。XHTML 1.0 在 2000 年 1 月 26 日成为 W3C 的推荐标准。

2. DOM节点

2.1 DOM Nodes

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

  • 整个文档是一个文档节点
  • 每个 HTML 元素是元素节点
  • HTML 元素内的文本是文本节点
  • 每个 HTML 属性是属性节点
  • 注释是注释节点

2.2 HTML DOM节点树

HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:

在这里插入图片描述

2.3 节点关系

节点树中的节点彼此拥有层级关系。

我们常用父(parent)、**子(child)和同胞(sibling)**等术语来描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)。
  • 每个节点都有父节点、除了根(它没有父节点)。
  • 一个节点可拥有任意数量的子节点。
  • 同胞是拥有相同父节点的节点。

下面的图片展示了节点树的一部分,以及节点之间的关系:

在这里插入图片描述

2.3.1 节点关系辨认

  
    
    DOM 教程
  
  
    

DOM 课程1

Hello world!

从上面的 HTML 中:

  • 节点没有父节点;它是根节点
  • 和 的父节点是 节点
  • 文本节点 “Hello world!” 的父节点是

    节点

并且:

  • 节点拥有两个子节点: 和
  • 节点拥有两个子节点: 与 节点</li> <li><title> 节点也拥有一个子节点:文本节点 “DOM 教程”</li> <li> <h1> 和 </p> <p> 节点是同胞节点,同时也是 的子节点</li></ul><p>并且:</p> <ul> <li> <p> 元素是 元素的首个子节点</p> </li> <li> <p> 元素是 元素的最后一个子节点</p> </li> <li> <p><h1> 元素是 元素的首个子节点</p> </li> <li> <p> 元素是 元素的最后一个子节点 </p> </li> </ul> <h2>3. 查找DOM</h2> <p>现在我们了解了 DOM 文档是什么,接下来就可以开始获取我们的第一个 HTML 元素了。</p> <h3>3.1 按 ID 获取元素</h3> <p>getElementById() 方法用于通过其 id 获取单个元素。我们来看一个例子:</p> <pre class="brush:python;toolbar:false">var title = document.getElementById(‘header-title’); </pre> <p>我们得到 id 为 header-title 的元素,并将其保存到变量中。</p> <h3>3.2 按类名获取元素</h3> <p>还可以用 getElementsByClassName() 方法获取多个对象,该方法返回一个元素数组。</p> <pre class="brush:python;toolbar:false">var items = document.getElementsByClassName(‘list-items’); </pre> <p>这里我们得到类 list-items 的所有项目,并将它们保存到变量中。</p> <h3>3.3 按标签名称获取元素</h3> <p>还可以用 getElementsByClassName() 方法按标记名称获取元素。</p> <pre class="brush:python;toolbar:false">var listItems = document.getElementsByTagName(‘li’); </pre> <p>这里我们获取 HTML 文档中所有得 li 元素并将它们保存到变量中。</p> <h3>Queryselector</h3> <p>querySelector()方法返回与指定的 <em>CSS选择器匹配的第一个元素</em>。这意味着你可以通过id、class、tag和所有其他有效的 CSS 选择器获取元素。在这里我列出了一些最常用的选项。</p> <h4>按 id 获取:</h4> <pre class="brush:python;toolbar:false">var header = document.querySelector(‘#header’) </pre> <h4>按 class 获取:</h4> <pre class="brush:python;toolbar:false">var items = document.querySelector(‘.list-items’) </pre> <h4>按标签获取:</h4> <pre class="brush:python;toolbar:false">var headings = document.querySelector(‘h1’); </pre> <h4>获取更具体的元素:</h4> <p>我们还可以使用 <em>CSS Selectors</em> 获得更多的特定元素。</p> <pre class="brush:python;toolbar:false">document.querySelector(“h1.heading”); </pre> <p>在这个例子中,我们同时搜索标记和类,并返回传递给 CSS Selector 的第一个元素。</p> <h3>Queryselectorall</h3> <p>querySelectorAll() 方法与 querySelector() 完全相同,只是它返回符合 CSS Selector 的所有元素。</p> <pre class="brush:python;toolbar:false">var heading = document.querySelectorAll(‘h1.heading’); </pre> <p>在这个例子中,我们得到所有属于 heading 类的 h1 标签,并将它们存储在一个数组中。</p> <h2>4. DOM修改</h2> <p>HTML DOM 允许我们通过更改其属性来对 HTML 元素的内容和样式进行修改。</p> <h3>4.1 更改HTML</h3> <p>innerHTML 属性可用于修改 HTML 元素的内容。</p> <pre class="brush:python;toolbar:false">document.getElementById(“#header”).innerHTML = “Hello World!”; </pre> <p>在这个例子中,我们得到 id 为 header 的元素,并把其内容设置为“Hello World!”。</p> <p>InnerHTML 还可以把标签放入另一个标签中。</p> <pre class="brush:python;toolbar:false">document.getElementsByTagName("div").innerHTML = "<h1>Hello World!</h1>" </pre> <p>在这里将 h1 标记放入所有已存在的 div 中。</p> <h3>4.2 更改属性的值</h3> <p>还可以用 DOM 更改属性的值。</p> <pre class="brush:python;toolbar:false">document.getElementsByTag(“img”).src = “test.jpg”; </pre> <p>在这个例子中,我们把所有 <img /> 标签的 src 改为 <em>test.jpg</em>。</p> <h3>4.3 改变样式</h3> <p>要更改 HTML 元素的样式,需要更改元素的样式属性。以下是更改样式的示例语法:</p> <pre class="brush:python;toolbar:false">document.getElementById(id).style.property = new style </pre> <p>接下来看一个例子,我们获取一个元素并将底部边框改为纯黑线:</p> <pre class="brush:python;toolbar:false">document.getElementsByTag(“h1”).style.borderBottom = “solid 3px #000”; </pre> <p>CSS 属性需要用 camelcase 而不是普通的 css 属性名来编写。在这个例子中,我们用 borderBottom 而不是 border-bottom。</p> <h2>5. DOM元素的添加和删除</h2> <p>现在我们来看看如何添加新元素和删除现有元素。</p> <h3>5.1 添加元素</h3> <pre class="brush:python;toolbar:false">var div = document.createElement(‘div’); </pre> <p>在这里我们用了 createElement() 方法创建一个 div 元素,该方法将标记名作为参数并将其保存到变量中。之后只需要给它一些内容,然后将其插入到 DOM 文档中。</p> <pre class="brush:python;toolbar:false">var content = document.createTextNode("Hello World!"); div.appendChild(newContent); document.body.insertBefore(div, currentDiv); </pre> <p>这里用了 createTextNode() 方法创建内容,该方法用字符串作参数,然后在文档中已经存在的 div 之前插入新的 div 元素。</p> <h3>5.2 删除元素</h3> <pre class="brush:python;toolbar:false">var elem = document.querySelector('#header'); elem.parentNode.removeChild(elem); </pre> <p>本例中我们得到一个元素并使用 removeChild() 方法将其删除。</p> <h3>5.3 替换元素</h3> <p>现在让我们来看看怎样替换一个项目。</p> <pre class="brush:python;toolbar:false">var div = document.querySelector('#div'); var newDiv = document.createElement(‘div’); newDiv.innerHTML = "Hello World2" div.parentNode.replaceChild(newDiv, div); </pre> <p>这里我们使用 replaceChild()方法替换元素。第一个参数是新元素,第二个参数是要替换的元素。</p> <h3>5.4 直接写入HTML输出流</h3> <p>还可以使用 write() 方法将 HTML 表达式和 JavaScript 直接写入 HTML 输出流。</p> <pre class="brush:python;toolbar:false">document.write(“<h1>Hello World!</h1><p>This is a paragraph!</p>”); </pre> <p>我们也可以把像日期对象这样的参数传给 JavaScript 表达式。</p> <pre class="brush:python;toolbar:false">document.write(Date()); </pre> <p>write() 方法还可以使用多个参数,这些参数会按其出现的顺序附加到文档中。</p> <h2>6. DOM事件</h2> <p>HTML DOM 允许 Javascript 对 HTML 事件做出反应。下面列出了一些比较重要的事件:</p> <ul> <li>鼠标点击</li> <li>页面加载</li> <li>鼠标移动</li> <li>输入字段更改</li> </ul> <h3>6.1 分配事件</h3> <p>可以用标记上的属性直接在 HTML 代码中定义事件。以下是 <em>onclick</em> 事件的例子:</p> <pre class="brush:python;toolbar:false"><h1>Click me!</h1> </pre> <p>在此例中,单击按钮时,</p> <h1 /> 的文本将被改为 “Hello!”。</p> <p>还可以在触发事件时调用函数,如下一个例子所示。</p> <pre class="brush:python;toolbar:false"><h1>Click me!</h1> </pre> <p>这里我们在单击按钮时调用 changeText() 方法,并将该元素作为属性传递。</p> <p>还可以用 Javascript 代码为多个元素分配相同的事件。</p> <pre class="brush:python;toolbar:false">document.getElementById(“btn”).onclick = changeText(); </pre> <h3>6.2 指定事件监听器</h3> <p>接下来看看怎样为 HTML 元素分配事件监听器。</p> <pre class="brush:python;toolbar:false">document.getElementById(“btn”)addEventListener('click', runEvent); </pre> <p>这里我们刚刚指定了一个 click 事件,在单击 btn 元素时调用 runEvent 方法。</p> <p>当然还可以把多个事件指定给单个元素:</p> <pre class="brush:python;toolbar:false">document.getElementById(“btn”)addEventListener('mouseover', runEvent); </pre> <h2>总结</h2> <p>通过本篇博客,我们已经初步了解了JavaScript DOM技术的基本概念和操作步骤。DOM允许我们使用JavaScript来动态地修改网页内容,实现交互性和动态性。希望这篇入门指南能够帮助前端新手更好地理解DOM技术,并为日后的学习和实践打下坚实的基础。在深入学习过程中,你会发现DOM的更多复杂和强大之处。</p> <p>后续我们这个前端专栏还会讲述作用域、事件模型、内置对象、垃圾回收、js算法技巧等等文章,如果您感兴趣的话,欢迎点赞三连并关注我以及我的前端专栏,我们下期文章再见。</p> <div class="entry-copyright"><p>本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/dd6e90ec60.html</p></div> </div> <div class="entry-footer"> <div class="entry-tag"><a href="https://net2asp.com/tag/dom/" rel="tag">DOM</a><a href="https://net2asp.com/tag/javascript/" rel="tag">javascript</a><a href="https://net2asp.com/tag/%e5%89%8d%e7%ab%af/" rel="tag">前端</a><a href="https://net2asp.com/tag/%e5%bc%80%e5%8f%91%e8%af%ad%e8%a8%80/" rel="tag">开发语言</a></div> <div class="entry-action"> <div class="btn-zan" data-id="5153"><i class="fa fa-thumbs-up"></i> 赞 <span class="entry-action-num">(0)</span></div> </div> <div class="entry-bar"> <div class="entry-bar-inner clearfix"> <div class="info text-center"> <div class="info-item meta"> </div> <div class="info-item share"> <a class="meta-item mobile j-mobile-share" href="javascript:;" data-id="5153" data-qrcode="https://net2asp.com/dd6e90ec60.html"><i class="fa fa-share-alt"></i> 生成海报</a> <a class="meta-item wechat" data-share="wechat" target="_blank" rel="nofollow" href="#"> <i class="fa fa-wechat"></i> </a> <a class="meta-item weibo" data-share="weibo" target="_blank" rel="nofollow" href="#"> <i class="fa fa-weibo"></i> </a> <a class="meta-item qq" data-share="qq" target="_blank" rel="nofollow" href="#"> <i class="fa fa-qq"></i> </a> </div> <div class="info-item act"> <a href="javascript:;" id="j-reading"><i class="fa fa-file-text"></i></a> </div> </div> </div> </div> <div class="entry-page"> <div class="entry-page-prev" style="background-image: url();"> <a href="https://net2asp.com/f4b0aecb37.html" title="2023 英特尔On技术创新大会直播 | 边云协同加速 AI 解决方案商业化落地" rel="prev"> <span>2023 英特尔On技术创新大会直播 | 边云协同加速 AI 解决方案商业化落地</span> </a> <div class="entry-page-info"> <span class="pull-left">« 上一篇</span> <span class="pull-right">1天前</span> </div> </div> <div class="entry-page-next" style="background-image: url();"> <a href="https://net2asp.com/215f48d393.html" title="自动化测试框架:DrissionPage(1)——安装与设置" rel="next"> <span>自动化测试框架:DrissionPage(1)——安装与设置</span> </a> <div class="entry-page-info"> <span class="pull-right">下一篇 »</span> <span class="pull-left">1天前</span> </div> </div> </div> <h3 class="entry-related-title">相关推荐</h3><ul class="entry-related clearfix cols-3 post-loop post-loop-default"><li class="item item-no-thumb"> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/d811e2b64e.html" title="Redis的5.0/6.0/7.0版本重点介绍以及使用!" target="_blank"> Redis的5.0/6.0/7.0版本重点介绍以及使用! </a> </h4> <div class="item-excerpt"> <p>Redis介绍 一,介绍 Redis(Remote Dictionary Server)是一个开源的高性能键值存储数据库,具有以下几个重要的特点和功能: 高性能:Redis 是以内…</p> </div> <div class="item-meta"> <a class="item-meta-li" href="https://net2asp.com/database/" target="_blank">数据库</a> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/4a2a63c6a3.html" title="Python 实例|matplotlib|绘制直方图(各参数样例)" target="_blank"> <img src="/img/c3/f34169f2b86a4b1688f2bca467fb44ed.png" width="480" height="300" alt="Python 实例|matplotlib|绘制直方图(各参数样例)" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/python/" target="_blank">Python</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/4a2a63c6a3.html" title="Python 实例|matplotlib|绘制直方图(各参数样例)" target="_blank"> Python 实例|matplotlib|绘制直方图(各参数样例) </a> </h4> <div class="item-excerpt"> <p>matplotlib.pyplot.hist 的官方文档:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.h…</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/1cee83f1bb.html" title="数据库三大范式、BC范式、第四范式" target="_blank"> <img src="/img/ab/d825f37e64c84b39b1e7f0a5fb9bba97.png" width="480" height="300" alt="数据库三大范式、BC范式、第四范式" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/database/" target="_blank">数据库</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/1cee83f1bb.html" title="数据库三大范式、BC范式、第四范式" target="_blank"> 数据库三大范式、BC范式、第四范式 </a> </h4> <div class="item-excerpt"> <p>目录 第一范式(1NF):原子性(存储的数据应该具有“不可再分性”) 第二范式(2NF):唯一性 (消除非主键部分依赖联合主键中的部分字段)(一定要在第一范式已经满足的情况下) 第…</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/e510ad9f04.html" title="Oracle查询,将某列查询结果用逗号隔开,拼接成一行(listagg函数、xmlagg函数)…" target="_blank"> <img src="/img/5e/3cffcc63c52ee23bcdc38a6f3b803e83.png" width="480" height="300" alt="Oracle查询,将某列查询结果用逗号隔开,拼接成一行(listagg函数、xmlagg函数)…" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/database/" target="_blank">数据库</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/e510ad9f04.html" title="Oracle查询,将某列查询结果用逗号隔开,拼接成一行(listagg函数、xmlagg函数)…" target="_blank"> Oracle查询,将某列查询结果用逗号隔开,拼接成一行(listagg函数、xmlagg函数)… </a> </h4> <div class="item-excerpt"> <p>需求:Oracle数据库,通过查询,将查询字段的该列结果用逗号拼接成一行。 1. 查询语法 1.1 listagg函数 select listagg(查询拼接字段,’,’) wit…</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/c0b1c85e92.html" title="【报错】Cannot deserialize value of type `java.time.LocalDateTime` from String" target="_blank"> <img src="/img/ee/4571a75219434a31910d017e05ca133a.png" width="480" height="300" alt="【报错】Cannot deserialize value of type `java.time.LocalDateTime` from String" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/jave/" target="_blank">Jave</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/c0b1c85e92.html" title="【报错】Cannot deserialize value of type `java.time.LocalDateTime` from String" target="_blank"> 【报错】Cannot deserialize value of type `java.time.LocalDateTime` from String </a> </h4> <div class="item-excerpt"> <p>错误描述 接口测试中报错 Cannot deserialize value of type `java.time.LocalDateTime` from String \”2023…</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/6d0f487bb6.html" title="手把手教你如何用python进行数据分析!(附四个案例)" target="_blank"> <img src="/img/fd/2e5cd7231e2a43aa8f64dc9397883e04.png" width="480" height="300" alt="手把手教你如何用python进行数据分析!(附四个案例)" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/python/" target="_blank">Python</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/6d0f487bb6.html" title="手把手教你如何用python进行数据分析!(附四个案例)" target="_blank"> 手把手教你如何用python进行数据分析!(附四个案例) </a> </h4> <div class="item-excerpt"> <p>一、前期准备 三个包:Numpy、Pandas和matplotlib;工具:jupyter notebook。首先确保导入这两个包 #导入Numpy包 import numpy a…</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/89fc6da603.html" title="SpringBoot与MybatisPlus MybatisPlus" target="_blank"> <img src="/img/fb/c24553d70c254606ad590e71b59a5688.png" width="480" height="300" alt="SpringBoot与MybatisPlus MybatisPlus" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/jave/" target="_blank">Jave</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/89fc6da603.html" title="SpringBoot与MybatisPlus MybatisPlus" target="_blank"> SpringBoot与MybatisPlus MybatisPlus </a> </h4> <div class="item-excerpt"> <p>一、MyBatisPlus概述 MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。 MyBa…</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/e824f3ca80.html" title="Windows下redis的安装与使用" target="_blank"> <img src="/img/fa/d6b17be445e14ff789427f0c4da0bdee.png" width="480" height="300" alt="Windows下redis的安装与使用" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/database/" target="_blank">数据库</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/e824f3ca80.html" title="Windows下redis的安装与使用" target="_blank"> Windows下redis的安装与使用 </a> </h4> <div class="item-excerpt"> <p>一、下载 redis.io 官网没有Windows版本的,需要去redis-windows下载。 redis安装包与客户端 二、使用与配置 2.1 解压安装 redis的Windo…</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/dd278416cc.html" title="IDEA2022版教程上(下载、卸载、安装、新建Project、jdk设置、详细设置、新建/导入/删除普通java模块、修改模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键)" target="_blank"> <img src="/img/9d/7089c496220741c089d5263eaf515750.png" width="480" height="300" alt="IDEA2022版教程上(下载、卸载、安装、新建Project、jdk设置、详细设置、新建/导入/删除普通java模块、修改模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键)" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/jave/" target="_blank">Jave</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/dd278416cc.html" title="IDEA2022版教程上(下载、卸载、安装、新建Project、jdk设置、详细设置、新建/导入/删除普通java模块、修改模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键)" target="_blank"> IDEA2022版教程上(下载、卸载、安装、新建Project、jdk设置、详细设置、新建/导入/删除普通java模块、修改模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键) </a> </h4> <div class="item-excerpt"> <p>0、前景摘要 0.1 概览 0.2 套课程适用人群 初学Java语言,熟悉了记事本、EditPlus、NotePad++或Sublime Text3等简易开发工具的Java初学者 …</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="https://net2asp.com/ed24b4f551.html" title="《C++ Core Guidelines解析》深入理解C++" target="_blank"> <img src="/img/0b/5511a65a72fd48659f75df875b36eb3f.png" width="480" height="300" alt="《C++ Core Guidelines解析》深入理解C++" referrerpolicy="no-referrer"> </a> <a class="item-category" href="https://net2asp.com/database/" target="_blank">数据库</a> </div> <div class="item-content"> <h4 class="item-title"> <a href="https://net2asp.com/ed24b4f551.html" title="《C++ Core Guidelines解析》深入理解C++" target="_blank"> 《C++ Core Guidelines解析》深入理解C++ </a> </h4> <div class="item-excerpt"> <p>前言 在计算机编程领域,C++一直以其高效、灵活和强大而闻名。然而,C++作为一种复杂的编程语言,如果没有正确的理解和使用,很容易导致软件质量的下降和性能问题的出现。幸运的是,一本…</p> </div> <div class="item-meta"> <span class="item-meta-li date">1天前</span> </div> </div> </li> </ul> </div> </div> </article> </div> <aside class="sidebar"> <div id="recent-posts-2" class="widget widget_recent_entries"> <h3 class="widget-title"><span>最新</span></h3> <ul> <li> <a href="https://net2asp.com/d811e2b64e.html">Redis的5.0/6.0/7.0版本重点介绍以及使用!</a> </li> <li> <a href="https://net2asp.com/4a2a63c6a3.html">Python 实例|matplotlib|绘制直方图(各参数样例)</a> </li> <li> <a href="https://net2asp.com/1cee83f1bb.html">数据库三大范式、BC范式、第四范式</a> </li> <li> <a href="https://net2asp.com/e510ad9f04.html">Oracle查询,将某列查询结果用逗号隔开,拼接成一行(listagg函数、xmlagg函数)…</a> </li> <li> <a href="https://net2asp.com/c0b1c85e92.html">【报错】Cannot deserialize value of type `java.time.LocalDateTime` from String</a> </li> <li> <a href="https://net2asp.com/6d0f487bb6.html">手把手教你如何用python进行数据分析!(附四个案例)</a> </li> <li> <a href="https://net2asp.com/89fc6da603.html">SpringBoot与MybatisPlus MybatisPlus</a> </li> <li> <a href="https://net2asp.com/e824f3ca80.html">Windows下redis的安装与使用</a> </li> <li> <a href="https://net2asp.com/dd278416cc.html">IDEA2022版教程上(下载、卸载、安装、新建Project、jdk设置、详细设置、新建/导入/删除普通java模块、修改模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键)</a> </li> <li> <a href="https://net2asp.com/ed24b4f551.html">《C++ Core Guidelines解析》深入理解C++</a> </li> <li> <a href="https://net2asp.com/c332c218b0.html">虚拟线程探索与实践</a> </li> <li> <a href="https://net2asp.com/62589f1372.html">DBeaver连接SQLite数据库</a> </li> <li> <a href="https://net2asp.com/e250439cad.html">(Java)关于easyExcel合并单元格</a> </li> <li> <a href="https://net2asp.com/c782152b88.html">252.【2023年华为OD机试真题(C卷)】局域网中的服务器个数(优先搜索(DFS)-Java&Python&C++&JS实现)</a> </li> <li> <a href="https://net2asp.com/b8cc05fa74.html">原神抢码,米游社抢码-首发</a> </li> </ul> </div> </aside> </div> </div> <footer class="footer"> <div class="container"> <div class="clearfix"> <div class="footer-col footer-col-copy"> <div class="copyright"> <p>Copyright © 2022 Www.Net2asp.COM Rights Reserved.</p> <p class="footer-beian"><a href="https://beian.miit.gov.cn" target="_blank" rel="nofollow noopener">苏ICP备2025168566号-5</a></p> </div> </div> <div class="footer-col footer-col-sns"> <div class="footer-sns"> </div> </div> </div> </div> </footer> <div class="action action-style-0 action-color-0 action-pos-0"> <div class="action-item j-share"> <i class="action-item-icon"> <svg viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"/></svg> </i> </div> <div class="action-item gotop j-top"> <i class="action-item-icon"> <svg viewBox="0 0 24 24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z"/></svg> </i> </div> </div> <script type='text/javascript' id='main-js-extra'> /* <![CDATA[ */ var _wpcom_js = {"webp":"","ajaxurl":"https:\/\/net2asp.com\/wp-admin\/admin-ajax.php","theme_url":"https:\/\/net2asp.com\/wp-content\/themes\/news","slide_speed":"5000","video_height":"482","login_url":"https:\/\/net2asp.com\/wp-login.php","register_url":"https:\/\/net2asp.com\/wp-login.php?action=register"}; /* ]]> */ </script> <script type='text/javascript' src='https://net2asp.com/wp-content/themes/news/js/main.js?ver=5.7.3' id='main-js'></script> <script type='text/javascript' src='https://net2asp.com/wp-content/themes/news/js/wp-embed.js?ver=5.7.3' id='wp-embed-js'></script> <script type="application/ld+json"> { "@context": { "@context": { "images": { "@id": "http://schema.org/image", "@type": "@id", "@container": "@list" }, "title": "http://schema.org/headline", "description": "http://schema.org/description", "pubDate": "http://schema.org/DateTime" } }, "@id": "https://net2asp.com/dd6e90ec60.html", "title": "【前端】对前端小白极为友好的JS DOM入门文章", "images": ["/img/e0/803e6fbfd4f047d4a8e0d450202c3a62.png","/img/4e/41d7c9e6aa834109bf92639ee328eae5.png","/img/5c/6f48668895d06b80b57e8e5adcfa79ca.jpeg"], "description": "在现代web开发中,JavaScript (JS) 是不可或缺的一部分,它使我们能够为网页赋予交互性和动态性。其中,DOM(文档对象模型)技术在前端开发中起着至关重要的作用。本篇博...", "pubDate": "2024-03-07T01:51:04", "upDate": "2024-03-07T01:51:04" } </script> <script>setup_share(1);</script> <script> document.querySelectorAll('img').forEach(img => { img.onerror = () => img.src = '/default.jpeg'; }); </script> </body> </html>