首页 > 其他分享 >JS DOM操作(一)

JS DOM操作(一)

时间:2024-03-15 15:04:07浏览次数:21  
标签:node console log DOM 元素 JS var 操作 节点

. # 1.DOM操作分类

1.1DOM core(核心操作)

  • document:表示整个文档,可以用于访问文档的各个部分和属性。
  • Element:表示 HTML 元素,提供了访问和操作元素的方法和属性。
  • Node:表示文档中的节点,包括元素、文本节点、注释等,提供了节点通用的方法和属性。

1.2HTML-DOM

  • 获取元素:通过 ID、类名、标签名等方式获取 HTML 元素。
  • 修改内容:修改元素的文本内容、HTML 内容等。
  • 操作属性:设置和获取元素的属性值。
  • 创建元素:动态创建新的 HTML 元素并添加到文档中。

1.3CSS-DOM

  • 访问样式:获取元素的计算样式、内联样式等。
  • 修改样式:动态修改元素的样式,如改变颜色、大小、位置等。
  • 创建样式:动态创建新的样式表并应用到文档中的元素。

2 节点和节点之间的关系

2.1节点和节点之间的关系

整个文档是一个文档节点

每个HTML标签是一个元素节点

包含在HTML元素中的文本是文本节点

每一个HTML属性是一个属性节点

注释属于注释节点

在这里插入图片描述

使用父节点(parent),子节点(child),兄弟节点(sibling)等术语来描述节点的层次关系,父节点拥有子节点,同级的子节点被称为同胞或者兄弟节点

在DOM树中,顶部节点被称为根(root),< html>节点。

每一个节点都有父节点,除了根,如< head>和< body>的父节点都是< html>节点,文本节点“DOM应用”的父节点是< title>节点

一个节点可以拥有任意数量的子节点,如< body>节点的子节点有< h1>,< p>和< ul>节点。

兄弟节点是拥有相同父元素的节点。例如,两个< li>就是兄弟节点,它们的父节点均为< ul>节点

2.2重要的节点类型

  1. 元素节点 (Node.ELEMENT_NODE, 值为 1):
  2. 代表注释内容,如 。
    属性节点 (Node.ATTRIBUTE_NODE, 值为 2):
  3. 代表 HTML 元素,如 < div>, < p>, < a> 等。
    文本节点 (Node.TEXT_NODE, 值为 3):
  4. 代表元素或属性中的文本内容。
    注释节点 (Node.COMMENT_NODE, 值为 8):
  5. 代表元素的属性,如 id, class 等。
    文档节点 (Node.DOCUMENT_NODE, 值为 9):
var node = document.getElementById('myElement');
if (node.nodeType === Node.ELEMENT_NODE) {
    console.log('这是一个元素节点');
} else if (node.nodeType === Node.TEXT_NODE) {
    console.log('这是一个文本节点');
} else if (node.nodeType === Node.COMMENT_NODE) {
    console.log('这是一个注释节点');
}

2.3 节点属性

node.parentNode:获取节点的父节点。

node.parentNode:获取节点的父节点:
var childNode = document.getElementById(‘child’);
var parentNode = childNode.parentNode;
console.log(parentNode.id); // 输出:parent`
node.childNodes:获取节点的所有子节点列表。
node.firstChild / node.lastChild:获取节点的第一个 / 最后一个子节点。
node.nextSibling / node.previousSibling:获取节点的下一个 / 上一个同级节点。**

node.parentNode:获取节点的父节点:
html
<div id="parent">
    <p id="child">子节点</p>
</div>
javascript
var childNode = document.getElementById('child');
var parentNode = childNode.parentNode;
console.log(parentNode.id); // 输出:parent


node.childNodes:获取节点的所有子节点列表:
html
<ul id="parent">
    <li>子节点 1</li>
    <li>子节点 2</li>
    <li>子节点 3</li>
</ul>
javascript
var parentNode = document.getElementById('parent');
var childNodes = parentNode.childNodes;
childNodes.forEach(function(child) {
    console.log(child.textContent);
});

node.firstChild / node.lastChild:获取节点的第一个 / 最后一个子节点:
html
<div id="parent">
    <p>第一个子节点</p>
    <p>中间子节点</p>
    <p>最后一个子节点</p>
</div>
javascript
var parentNode = document.getElementById('parent');
var firstChild = parentNode.firstChild;
var lastChild = parentNode.lastChild;
console.log(firstChild.textContent); // 输出:第一个子节点
console.log(lastChild.textContent); // 输出:最后一个子节点


node.nextSibling / node.previousSibling:获取节点的下一个 / 上一个同级节点:
html
<ul>
    <li>节点 1</li>
    <li>节点 2</li>
    <li id="target">目标节点</li>
    <li>节点 3</li>
</ul>
javascript
var targetNode = document.getElementById('target');
var nextNode = targetNode.nextSibling;
var previousNode = targetNode.previousSibling;
console.log(nextNode.textContent); // 输出:节点 3
console.log(previousNode.textContent); // 输出:节点 2

2.4 element常用属性

  1. firstElementChild / lastElementChild:获取元素的第一个子元素节点和最后一个子元素节点。
  2. nextElementSibling /previousElementSibling 获取当前元素之后的下一个兄弟元素节点/获取当前元素之前的上一个兄弟元素节点
var parentElement = document.getElementById('parent');
var firstElement = parentElement.firstElementChild;
var lastElement = parentElement.lastElementChild;

<body>
    <div id="first">First Div</div>
    <div id="second">Second Div</div>
    <div id="third">Third Div</div>

    <script>
  		// 获取第一个 div 元素
        var firstDiv = document.getElementById('first');

        // 获取第一个 div 元素之后的下一个兄弟元素节点
        var nextElement = firstDiv.nextElementSibling;

        if (nextElement) {
            console.log(nextElement.id); // 输出下一个兄弟元素节点的 id
        } else {
            console.log('No next element sibling found.');
        }
        
        // 获取第二个 div 元素
        var secondDiv = document.getElementById('second');

        // 获取第二个 div 元素之前的上一个兄弟元素节点
        var previousElement = secondDiv.previousElementSibling;

        if (previousElement) {
            console.log(previousElement.id); // 输出上一个兄弟元素节点的 id
        } else {
            console.log('No previous element sibling found.');
        }
    </script>
</body>

标签:node,console,log,DOM,元素,JS,var,操作,节点
From: https://blog.csdn.net/m0_74270395/article/details/136632772

相关文章

  • 在LINUX下,关于文件读写的操作
    对于我在做EMS的项目中需要把关键数据要保存下来,之前采用将关键数据保存在EMMC当中,结果发现会导致系统崩溃,所以还是采用将数据存储在文件的方法。下面是文件的相关操作//在嵌入式系统中,可以使用标准C库提供的文件操作函数来进行文件的读、写和删除操作。下面是对应的实现方......
  • Light Random Sprays Retinex 传统的图像增强算法LRSR
    文章目录前言1、LightRandomSpraysRetinex概况2、LightRandomSpraysRetinex具体实现2.1、噪声去除2.2、亮度调整2.3、插值技术3、LightRandomSpraysRetinex源码4、LightRandomSpraysRetinex效果及结论前言  LightRandomSpraysRetinex,即“光随......
  • 脑图系列-操作系统IO
     同步、异步、阻塞、非阻塞同步与异步描述的是被调用者的如果是同步,B在接到A的调用后,会立即执行要做的事。A的本次调用可以得到结果。让我干活立马就干,立即反馈结果如果是异步,B在接到A的调用后,不保证会立即执行要做的事,但是保证会去做,B在做好了之后会通知A。A的本次调用......
  • fastjson1.2.24-RCE漏洞复现
    触发过程图靶场模拟1、实验环境准备攻击者kali(192.168.101.141)使用工具:marshalsec-0.0.3-SNAPSHOT-all.jarGitHub-RandomRobbieBF/marshalsec-jar:marshalsec-0.0.3-SNAPSHOT-allcompiledonX64被攻击者centos7(192.168.101.148)使用工具:dockerdocker-compose......
  • MirageJS 使用总结 vue2上亲测使用
    注:MirageJS英文文档看的头疼,且百度上都是片段比较多,本着拿来主义的思路,就把代码粘贴上,这样不仅方便自己,也能方便大家简单介绍一下他的好处及功能MirageJS是一个用于模拟服务器端数据和网络请求的JavaScript库,它可以帮助开发者在前端环境中创建假数据、定义路由和处理请求。......
  • MeterSphere接口自动化系列之JSONPath常用提取方式
    一、使用场景        针对接口返回结果,提取相应的信息,用于后续接口输入或用于执行结果断言,对应平台的后置操作、断言规则页签。        二、常用方式实例接口返回结果{"code":0,"data":{"cart":{"id":"34253627754......
  • numpy中random.seed()与random.RandomState()的区别
    1.random.seed()用处:初始化随机数生成器。设置随机数生成器种子后,直接生成随机数即可,无需在随机数生成器条件下运行。2.random.RandomState()作用:获得随机数生成器 比较上面两图可以看出,获取随机数生成器之后,必须在此条件下运行,才可生成相同的随机数,若不在此条件下运行,随......
  • Android中的NFC操作
    目录1.申请权限2.设置意图过滤器3.判断NFC功能是否可用(NfcAdapter)4.NFC感应(NfcAdapter)启用与禁用5.NFC数据解码6.案例代码一览NFC的全称是“NearFieldCommunication”,意思是近场通信、与邻近的区域通信。该功能由NfcAdapter(NFC适配器)控制。1.申请权限<!--N......
  • js如何拦截全局Fetch的请求和响应
    目前,团队采用了根路径转发的方式,将接口请求转发到服务器上,实现了一定的解耦。然而,随着团队后端策略的变化,现在希望前端直接请求一个新的接口域名,而不再经过中间层的处理。在这种情况下,由于之前的代码中没有对接口请求进行统一的封装,需要考虑如何以最小的成本进行迁移。Fetc......
  • 08JSON格式
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......