百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

DOM的简单认识 - js(dom,dsm)

zhezhongyun 2025-02-03 16:12 58 浏览

1、认识DOM

文档对象模型(document Object model),由W3C提出的标准,是一个使用脚本动态的访问和更新文档的内容、结构以及样式;

DOM 提供了相应的API(接口),可以对文档进行增删改查,以实现js对网页元素的静态(进行)控制,实现动态网页的功能

2、HTML 节点树

DOM 的原理是将文档装入内容,并以节点的形式解析为一棵节点树

HTML 文档就是一种树状的结构化文档

3、节点类型

1.元素节点:就是指标签

2.属性节点:就是指标签上的属性

3.文本节点:就是指标签之间的文本内容

4、获取节点的辅助方法

>> childNodes: 返回该节点下所有的子节点列表【包含空白符】(集合)【类似数组结构】

语法:父节点.childNodes

>> .hasChildNodes(); --判断是否有子节点

语法:父元素.hasChildNodes();

>> firstChild --返回第一个子节点

语法:父元素.firstChild

>> lastChild --返回最后一个子节点

语法:父元素.lastChild

>> .previousSibling --返回上一个兄弟节点

语法:父元素.previousSibling

>> .nextSibling --返回写一个兄弟节点

语法:父元素.nextSibling

>> parentNode(靠谱)

语法:子节点.parentNode --返回父节点

>> children --返回所有的节点(靠谱,不包含空白符)

语法:父元素.children

5、节点属性

5.1 节点名字:nodeName

1.元素节点的 nodeName 与标签名字一样;

2.属性节点的 nodeName 与属性名一样;

3.文本节点的 nodeName 固定值为 #text;

5.2 节点值: nodeValue

1.元素节点的 nodeValue 为Undefined 或者 null

2.属性节点的 nodeValue 为属性值

3.文本节点的 nodeValue 为文本内容

5.3 节点类型: nodeType

1.元素节点的 nodeType 为 1

2.属性节点的 nodeType 为 2

3.文本节点的 nodeType 为 3


// 获取节点的方法

1、获取节点方法(W3C)

>>通过 ID 获取标签(获取一个标签)

document.getElementByID(id);

>> 通过标签名获取:(获取一个标签的集合、类似数组结构)

document.getElementsByTagName(tagname);

>> 通过 name 获取标签(获取的是一个集合)

document .getElementsByName(name);

>> 通过 class 名字获取标签(获取一个标签的集合、类似数组结构)只支持IE9及以上

document.getElementsByClassName(classname)

2、其他方法:

>> 获取HTML标签(所有浏览器都支持的)

document.documentElement

>> 获取body标签

document.body

>> 通过 form 的 name 获取表单

例如:console.log(
document.loginForm.username);

语法:document.表单名字

document.表单名字.表单元素名

3、强大的 query【无法获取动态添加的 dom 节点】

document.querySelector(css选择器); --返回找到的第一个元素

document.querySelector('#nav');

document.querySelector('li');

document.querySelectorAll(css选择器) --返回找到的所有元素


// 获取属性

1、获取属性:

>> 元素.attributes --获取元素属性集合

console.log(attributes);

console.log(attributes[0]);

>> 元素.属性名

【因为class是关键字,所以要写上className;用于获取元素】

console.log(baidu.className);

>> 元素.getAttribute(属性名)

【用于获取某一个属性】

console.log(baidu.getAttribute('href'));

[如果是class就不需要再用className了,因为''封装了不会起冲突]

console.log(baidu.getAttribute('class'));

2、设置属性:

>> 元素.属性名 = '属性值';

baidu.style.color = 'red';

>> 元素.setAttribute(属性名,属性值);

baidu.setAttribute('title','您点击之后不会发生改变');

3、移除属性

元素.removeAttribute(属性名);

4、判断是否有某一个属性

元素.hasAttribute(属性名) --返回值是一个布尔值

5、HTML5 自定义属性操作

>> element.dataset.自定义属性名(如:data-index)

>> element.getAttribute('data-index');


// 操作CSS样式

>> 元素.style.css属性名 = css属性值;【大多数都要加''因为是值】

demo.style.height = '50px';

demo.style.border = '2px solid red';

注意:【如果css单词是通过链接的单词,则需要写成驼峰式命名】

如:demo.style.borderBottom = '2px solid red';

【因为float是js中的保留字,所以要写为cssFloat】

如: demo.style.cssFloat = 'right';

>> cssText【可以帮助我么批量的设置CSS样式】

demo.style.cssText += 'width: 400px;height: 50px;';

>> 添加 classname (推荐使用)

提前在css中写好class,接下来动态添加class,比如:demo.className = 'demo box';

demo.className = 'demo box';

相关推荐

3 分钟!AI 从零开发五子棋全过程曝光,网友:这效率我服了

<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8...

一行代码实现display&quot;过渡动画&quot;原理

作者:Peter谭老师转发链接:https://mp.weixin.qq.com/s/XhwPOv62gypzq5MhhP-5vg写本文的起因上篇文章,提到如何让display出现过渡动画,却没有仔...

脑洞:琼恩·雪诺、蝙蝠侠和魔形女的灵魂宠物了解一下

AlekseiVinogradovisaRussianfreelancedigitalartistwhoshareshisskillsandtalentwith120k...

浏览器的渲染机制、重绘、重排

1、什么是重排和重绘网页生成过程:HTML被HTML解析器解析成DOM树css则被css解析器解析成CSSOM树结合DOM树和CSSOM树,生成一棵渲染树(RenderTree)生成布局(flo...

托福写作高频考题写作思路&amp;词汇丨考虫独家

科技话题与媒体话题是托福写作的常考话题很多考生对这两类话题里的专有词汇表达也许很不了解所以今天就跟随考虫托福写作老师刘云龙老师一起来学习在这些话题的写作里你可以使用哪些有用的表达。希望大家有收获!记得...

在优麒麟上使用 Electron 开发桌面应用

使用Web标准来创建桌面GUI,上手快、成本低、跨平台、自适应分辨率,这些都是Electron的优势。作者/来源:优麒麟Electron是由Github开发,用HTML、CSS和...

php手把手教你做网站(三十八)jquery 转轮盘抽奖,开盲盒

抽奖和开盲盒性质一样的都是通过ajax读取后台的随机数据。1、转轮盘本来是想直接绘图实现轮盘,但是没有找到怎么填充文字,只好把轮盘弄成了背景图,通常用于游戏抽道具,商城积分抽奖,公司年末员工抽奖点击抽...

用 CSS 整活!3D 轮播图手把手教学,快乐代码敲出来

兄弟们,今天咱来搞点好玩的——用CSS整一个3D轮播图!咱野生程序员就是要在代码里找乐子,技术和快乐咱都得要!代码是写不完的,但咱能自己敲出快乐来,走起!一、先整个容器,搭个舞台咋先写一个...

实现一个超酷的 3D 立体卡片效 #前端开发

今天我们来实现一个超酷的3D立体卡片效果。正常情况下就是一个普通的图片展示卡片,鼠标悬停的时候图片会跳出卡片,并将影子投射到背景卡片上,在视觉上有一个3D立体感。html主要分成3个部分:容器→背景层...

Vue 3 Teleport与Suspense:解决UI难题的两个&quot;隐藏大招&quot;

模态框的"层级噩梦"与Teleport的救赎"这个模态框怎么又被父容器截断了?"团队协作开发后台系统时,小张第N次遇到这个问题。多层嵌套的组件结构里,弹窗被overfl...

让交互更加生动!有意思的鼠标跟随 3D 旋转动效

今天,群友问了这样一个问题,如下所示的鼠标跟随交互效果,如何实现:简单分析一下,这个交互效果主要有两个核心:借助了CSS3D的能力元素的旋转需要和鼠标的移动相结合本文,就将讲述如何使用纯CSS...

填坑:transform元素导致zindex失效终极方法

今天遇到了使用css3动画的元素层级被放大置顶的问题,ios浏览器上没问题,安卓原生浏览器和安卓微信上有问题。使用了css3动画的元素z-index失效,兄弟元素设置多高的z-index都盖不住解决办...

诡异的层级错乱:一个被transform隐藏的CSS陷阱

周五下午三点十七分,设计部突然发来紧急截图——原本应该悬浮在顶部的导航菜单,此刻正诡异地被下方的轮播图遮挡。我盯着屏幕上错乱的层级关系,手指下意识地敲下z-index:9999,心里清楚这不过是程序...

动画篇--碎片动画

本文授权转载,作者:Sindri的小巢(简书)前言从最开始动笔动画篇的博客,至今已经过去了四个多月。这段时间回头看了看自己之前的动画文章,发现用来讲解动画的例子确实不那么的赏心悦目。于是这段时间总是想...

Nature:大洋转换断层处的拉张构造与两阶段地壳增生

Nature:大洋转换断层处的拉张构造与两阶段地壳增生转换断层是三种基本的板块边界之一,全球总长度超过48000km(Bird,2003),它们的发现为板块构造理论的建立奠定了重要的基础(Wil...