关于JavaScript中常见的DOM操作

【原生JavaScript常见DOM操作及方法 在这我们就来把原生JavaScript中一些常用的技术,来与小伙伴们一起学习、一起复习一下那些基础知识。注意收藏!!! 常见DOM操作 获取查找DOM元素 document.getElementById(idName) 通过id查找元素。返回的是元素DOM,如果页面上有多个相同ID的元素,则只会返回第一个元素,不会返回多个,原则上ID唯一的不可重复的,但是......(知道的都懂) constdom=document.getElementById('xxx') document.ge... 阅读详情

在这里插入图片描述
这里是修真院前端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析前端知识/技能。

大家好,我是IT修真院上海分院Web刘洪利。

今天给大家分享的是:关于JavaScript中常见的DOM操作

1.背景介绍

    什么是DOM?简单地说,DOM是一套对文档的内容进行抽象和概念化的方法

    在现实世界里,人们对所谓的'世界对象模型'都不会陌生,例如,当用'汽车'、'房子'和'树'等名词来称呼日常生活环境里的事物时,我们都可以百分百的肯定对方知道我们说的是什么,这是因为人们在对这些名词所代表的的东西有着相同的认知。于是,当对别人说"汽车停在车库里"时,可以断定他们不会理解为"小鸟关在壁橱里"

    我们的"世界对象模型"不进可以用来描述客观存在的事物,还可以同来描述抽象概念。例如,假设有个人想我问路,而我给出的答案是"左边第三栋房子",这个答案有没有意义取决于那个人能够理解"左边"和"第三"的含义。如果他不会数数或者分不清左右,则不管他是否理解这几个概念,我的回答对他都不会有任何的帮助。在现实世界中,正是因为大家对抽象的"世界对象模型"有着基本的共识,人们才能用非常简单的话来表达出复杂的含义并得到对方的理解。

    而DOM的定义则是由W3C所制定的标准,定义为"一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档的内容`、结构和样式。"

2.知识剖析

    2.1. 节点是什么

    节点这个词是一个网络用语,代表了网络中的一个连接点。一个网络就是由一些节点构成的集合。

    在现实世界中,一切事物都由原子构成。原子就是现实世界的节点。但是原子同样还可以进一步分解为更细小的亚原子微粒。这些亚原子微粒同样也是节点。

    DOM也是同样的情况。文档是由节点构成的集合,只不过此时的节点是文档树上的树枝和树叶而已。

    在DOM中有许多不同类型的节点。就像原子包含着亚原子微粒那样,也有很多类型的DOM节点包含着其他类型的节点。接下来我们先看看其中的三种:元素节点、文本节点和属性节点。

    2.2. 元素节点

    在DOM中的原子就是元素节点。

    像是我们现在所看到的这个网页,我们在编写时,会用到诸如<body>、<head>、<p>这些元素。如果把Web上的文档比作一座大厦,那么元素就是建造这座大厦的砖块,这些元素在在文档中的布局形成了文档的结构。元素可以包含其他的元素,在我们所看到的页面页中,内容都被包含在在一个<section>元素的内部。而唯一没有被包含在其他元素中的唯一元素是'<html>',他和我们的节点树的根元素,其他的所有元素都被包含在'<html>'中。

在这里插入图片描述

网页的部分节点树

    2.3. 文本节点

    元素节点只是节点类型的一种。如果一份文档完全有一些空白元素构成,他将有一个结构,但这份文档本身将不会包含什么内容。

    在我们的ppt首页中,'<p>'元素包含着文本,'分享人:刘洪利'。他就是一个文本节点。在html文档里,文本节点总是被包含在元素节点的内部。

    2.4. 属性节点

    属性节点用来对元素做出更具体的描述。例如,几乎所有的元素都有一个title属性,而我们可以利用这个属性对包含在元素里的东西做出准确的描述:'<p title="a gentle reminder">这是一个带有温馨提示的p标签</p>'

    在DOM中,title="a gentle reminder"是一个属性节点。因为属性总是被放在起始标签里,所以属性节点总是被包含在元素节点中。并非所有的标签都包含着属性,但是所有的属性都被元素包含。

在这里插入图片描述

元素的构成

    2.5. 常见的DOM操作

获取DOM

    通过使用 getElementById() 方法匹配元素的id属性来访问元素节点,对元素节点进行操作

    通过使用 getElementsByTagName() 方法匹配元素的tagName来访问元素节点,对元素节点进行操作

    通过使用 getElementsByClassName() 方法匹配元素的className来访问元素节点,对元素节点进行操作

    值得注意的是, getElementsByTagName() 和 getElementsByClassName() 这两种方法因为其访问的是节点中的可能为复数的属性,所以得到的会是一个以数组的形式来体现出来的元素节点集合,我们可以通过打印获取到的DOM节点来判断类型

                                                                                                    demo

DOM事件

    onclick事件---当用户点击时执行

    onload事件---当用户进入时执行

    onunload事件---用用户离开时执行

    onmouseover事件---当用户鼠标指针移入时执行

    onmouseout事件---当用户鼠标指针移出时执行

    onmousedown事件---当用户鼠标摁下时执行

    onmouseup事件---当用户鼠标松开时执行

                                                                                                    demo
  1. 常见问题

如何通过class和tag调用元素?如何对其设置属性?

4.解决方案

在一个页面中常常有多个class相同的元素,也有多个标签相同的元素,在调用时方法如下

                                                                                                    demo
  1. 扩展思考

     onblur事件---当对象失去焦点时发生
    
     onchange事件---当对象域的值被改变时发生
    
     button 事件---属性可返回一个整数,指示当事件被触发时哪个鼠标按键被点击。
    
     更多的事件就不一一的描述了,有兴趣的同学可以去看下这个
    
                                                                                                  w3school
    
  2. 参考文献

书籍:《JavaScript DOM编程艺术》

网址:w3school

7.更多讨论

        Q:dom操作是异步的吗

        A:dom的操作其实是同步的,但是渲染是异步的。因为JavaScript引擎线程跟GUI渲染线程是互斥的,即我执行的时候,你就靠边站,我执行完你才能执行。具体的可以看下这篇文章https://segmentfault.com/a/1190000005803237----《关于修改DOM是异步还是同步的问题》

        Q:除了getElementsByClassName()、getElementsByTagName()、getElementById()还有什么可以获取dom节点的方法

        A:

1.通过节点属性得到元素

                1)node属性:来获取节点的名称、类型、值。

js代码:

                window.οnlοad=function(){ 子节点

                    var pox = document.getElementById('pox');

                    alert(pox.childNodes.length) //子节点数量

                    alert(pox.childNodes[0].nodeValue); // 第一个子节点的内容

                    alert(pox.firstChild.nodeValue);  // 第一个子节点的内容

                    alert(pox.lastChild.nodeValue); // 最后一个节点的内容

                };

    注意:node只能获取当前节点的东西,在上面的js代码中node本身把节点指针放在元素上,所以本身没有value值,

2.层次节点属性:层级节点可以分为父子节点和兄弟节点,通过当前节点可以获取其他层次的节点。

    2.1)子节点childNodes、第一个字节点firstChilds、最后一个子节点lastChilds。

js代码:

    window.οnlοad=function(){ 子节点

        var pox = document.getElementById('pox');

        alert(pox.childNodes.length) //子节点数量

        alert(pox.childNodes[0].nodeValue); // 第一个子节点的内容

        alert(pox.firstChild.nodeValue);  // 第一个子节点的内容

        alert(pox.lastChild.nodeValue); // 最后一个节点的内容

    };

    2.2)父节点parentChild、兄弟节点previousSibing,nextSibing。

js代码:

    window.οnlοad=function(){ 父节点,上下节点

        var pox = document.getElementById('pox');

        alert(pox.parentNode);    //pox节点的父节点body节点

        alert(pox.firstChild.nextSibling);    //pox节点的子节点中第一个节点的下一个节点

        alert(pox.lastChild.previousSibling);  //pox节点的子节点中最后一个节点的上一个节点

        alert(pox.lastChild.previousSibling.nodeName)

    };

本回答摘自-----------《获取元素节点(DOM基础 )》http://blog.csdn.net/u010928364/article/details/43935875

        Q:dom操作的最佳实践应该是什么样的

        A:

                1. 平稳退化:正确的使用JavaScript脚本,让访问者在他们浏览器不支持JavaScript的情况下仍能顺利的浏览你的网站,即是有些功能无法使用,但最基本的操作仍能顺利完成。

                2. 分离JavaScript:将HTML内部DOM事件分离到外部来,保证HTML的纯净,同时可以在外部js文件通过获取DOM节点来给这个节点添加事件的形式来运行外部JavaScript文件。

                3. 向后兼容:因为不同浏览器对JavaScript的支持程度也不一致,绝大多数的浏览器都可以或多或少的支持JavaScript,,但比较古老的浏览器却很有可能无法理解DOM提供的方法和脚本。因此,我们通过以下几点来确保那些古老的浏览器不会因为脚本代码而出问题。

                        3.1. 对象检测:检测浏览器对JavaScript的支持程度。我们可以通过将某种方法打包在一个if语句中,然后根据这条语句的条件表达式的求值结果为true(这个方法存在)还是false(这个方法不存在)来决定应该采取怎么样的行动。

                        例如,如果有一个使用了getElementById()方法的函数么就可以在调用getElementById()方法之前先检查用户所用的浏览器是否支持这个方法。在使用对象检查时,一定要删除方法名后面的圆括号,如果不删掉,测试的将是方法的结果,无论方法是否存在

                        代码:

if( ! document.getElementById ) return false;

                4. 性能考虑: 为保证应用流畅的运行,在为文档编写和应用脚本时,需要注意一些问题。

                        4.1. 尽量少访问DOM和尽量减少标记

                                访问DOM的方式对脚本性能会产生很大的影响。例如当我们需要访问html页面中所有的div元素来找到我们想要的那个节点,我们不知道会有多少div元素来面对着我们,所以浏览器会去搜索整个DOM树,从中查找可能匹配的元素。

                                另一个是尽量减少文档中的标记数量。过多不必要的元素只会增加DOM树的规模,进而增加遍历DOM树以查找特定元素的时间。

                        4.2. 合并和放置脚本

                                我们通过合并外部JavaScript文件来减少加载页面时发送的请求数量。减少请求数量通常都是在性能优化时优先考虑的。

                        4.3. 压缩脚本

                                通过将脚本文件中不必要耳朵字节,如空格和注释统统删除,从而达到“压缩文件”的目的。

在这里插入图片描述

小课堂提问

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~


“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,学习的路上不再迷茫。

技能树.IT修真院

别再只调陀螺仪了!用OpenCV实现基于透视变换的EIS防抖,实测效果媲美手机 本文深入探讨了基于透视变换的EIS电子稳像技术,通过OpenCV实现高阶防抖算法,效果媲美主流手机厂商方案。详细解析了传统旋转平移模型的局限性,并展示了透视变换在复杂场景下的优势,包括数学原理、OpenCV实战代码及性能优化技巧,为视频防抖提供了专业解决方案。 阅读详情

相关推荐

docker安装的 n8n提示Your n8n server is configured to use a secure cookie, however you are either visiting

将原来的docker n8n进行删除后即可通过一下方式重新安装,如安装完n8n,提示。

满地找牙的博客 3341

常见DOM操作有哪些

这里是修真院前端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能,本篇分享的是: 【常见DOM操作有哪些】 1.背景介绍什么是DOM?简单地说,DOM是一套对文档的内容进行抽象和概念化的方法 在现实世界里...

weixin_33924770的博客 1489

SAP SD 教材 中文

SAP SD 教材 中文SAP SD 教材 中文SAP SD 教材 中文

最新Java开发毕业论文参考文献干货满满

最新Java开发毕业论文参考文献

weixin_43860634的博客 3万+

HTML DOM 详解

目录 DOM的简介...1 DOM节点... 2 DOM方法... 3 DOM属性... 4 DOM访问... 5 DOM – 修改... 6 DOM - 元素... 7 DOM - 事件... 8 DOM的简介 HTML DOM 是: HTML 的标准对象模型 HTML 的标准编程接口 W3C 标准 HTML DOM 定义了所有 HTML 元素的对象和属性,以及...

风·之痕的博客 1310

DOM操作

DOM操作

Mr_115的博客 3181

JavaScript练习题

一、单选题(共30题,每题2分) 1. ajax跨域的前端解决方案是哪个 A cors B jsonp C 服务器代理 D promise 正确答案:B 解析: jsonp是使用标签的src属性链接资源接口,在url中传递回调函数,实现跨域请求 2. 通过哪个属性可以判定一个DOM节点的类型 A prototype B nodeType C type D dim 正确答案:B 解析: 3. 下列哪个不是javascript中的关键字或保留..

BUG_Jia 3088

原生js获取document_常见的原生javascript DOM操作

1.创建元素创建元素:document.createElement()使用document.createElement()可以创建新元素。这个方法只接受一个参数,即要创建元素的标签名。这个标签名在HTML文档中不区分大小写,在XHTML中区分大小写。vardiv= document.createElement("div");使用createElement()方法创建新元素的同时,也为新元素设置...

weixin_35327612的博客 1109

js基础——常见DOM操作有哪些

修改 DOM 元素这个动作可以分很多维度,比如说移动 DOM 元素。以上仅为个人的粗略见解,如有不对,还请指正!

m0_75280873的博客 296

js中常见DOM操作

一、dom元素获取 document.getElementById(id的值) 通过id来获取元素的对象,返回值是一个对象 document.getElementsByName() 通过name属性来获取对象的,返回值是一个数组 document.getElementsByTagName() 通过标签来获取元素的对象, 返回值是一个数组 document.getElementsByClassName() 通过class类名来获取的对象,返回值是一个数组 document.querySelector

Wen_Tao98的博客 522

白骑士的JavaScript教学进阶篇之DOM操作 3.3.2 常见DOM操作(查找、修改、删除、创建元素)

在上一节中,我们介绍了 DOM 树的基本概念及其结构。在实际的网页开发中,DOM 操作是非常常见且重要的任务。通过 JavaScript 操作 DOM,我们可以实现动态更新网页内容、响应用户交互、控制页面布局等功能。在本节中,我们将深入探讨常见DOM 操作,包括如何查找、修改、删除和创建 DOM 元素。

JeremyTC的博客 1746

js-3:DOM常见操作有哪些?

日常开发中,离不开Dom操作。上述代码中,获取DOM元素后再进行添加操作,这个js节点是已经存在于当前文档树中,因此这个节点会先从原先的位置删除,再插入到新的位置。它提供了对文档的结构化的表述,并定义了一种方式,可以使从程序中对该结构进行访问,从而改变文档的结构,样式跟内容。删除节点:删除一个节点,首先要获取该节点本身以及它的父节点,然后调用父节点的removeChild把自己的删掉。需要注意的是,该方法返回的是一个NodeList的静态实例,它是一个静态的“快照”,而非“实时”的查询。

fakerlove的博客 257

JavaScript常见DOM操作

文档对象模型 (DOM) 是HTML和XML文档的编程接口常见操作分为创建节点查询节点更新节点添加节点删除节点。

wang1664178416的博客 981

JS中常见DOM操作API

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处获取。觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)**[外链图片转存中…(img-8MRcp330-1712460635210)][外链图片转存中…(img-fi2kAZmn-1712460635211)]由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处获取。

2401_84097745的博客 491

DOM操作

前端笔记4 JavaScript - DOM

weixin_45789701的博客 2747

DOM操作

**文档对象模型( Document Object Model ,简称DOM)** , 是W3C组织推荐的处理可扩展标记语言( HTML 或者XML )的**标准编程接口。** W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容、结构和样式。

weixin_62824507的博客 2148

DOM常见操作有哪些

DOM(文档对象模型)是一种用于表示和操作HTML和XML文档的标准。在JavaScript中,可以使用DOM API来对DOM进行操作

一步一个脚印,踏实努力,向着目标前进 3049

DOM编程

一.DOM概述 1.DOM DOMJavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作(比如增删内容)。 浏览器会根据 DOM 模型,将结构化文档(比如 HTML 和 XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和...

xianjs的博客 1926

dom操作

dom操作

aoe_z的博客 1141

20.DOM的理解,常见操作有哪些?

一、DOM 文档对象模型 (DOM) 是HTML和XML文档的编程接口 它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容 任何HTML或XML文档都可以用DOM表示为一个由节点构成的层级结构 节点分很多类型,每种类型对应着文档中不同的信息和(或)标记,也都有自己不同的特性、数据和方法,而且与其他类型有某种关系,如下所示: <html> <head> <title&gt...

kleinBlue.的博客 615
上一篇: 什么是angualr控制器?
下一篇: 从零学前端第十六讲:AngularJs与服务器通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值