JS基础进阶2-操作元素

news2024/12/27 4:10:01

目录

1.操作元素-修改DOM(文档对象模型)元素

1. 修改元素的文本内容

2. 修改元素的样式

3. 修改元素的属性

4. 修改元素的类名

5.修改body元素

 2.修改自定义属性

2.1H5中设置自定义属性、

2.2使用JavaScript修改自定义属性

 3.节点操作

3.1节点概述

3.2 创建节点

3.3 插入节点

3.4 删除节点

3.5替换节点

3.6 复制节点

3.7兄弟节点

1. nextSibling 和 previousSibling

2. nextElementSibling 和 previousElementSibling(IE9兼容)


1.操作元素-修改DOM(文档对象模型)元素

1. 修改元素的文本内容

textContent属性来修改元素的文本内容。这个属性会替换元素的所有子节点,只保留一个文本节点

// 假设我们有一个元素 <p id="demo">Hello</p>  
document.getElementById("demo").textContent = "Hello, World!";
var btn = document.querySelector('button').innerText="好好学习,专注自己";

 插入HTML内容(而不是纯文本),可以使用innerHTML属性,但请注意这可能会使你的网页容易受到跨站脚本(XSS)攻击

// 插入HTML  
document.getElementById("demo").innerHTML = "<strong>Hello, World!</strong>";

2. 修改元素的样式

修改元素的style属性来更改其样式。style属性是一个对象,你可以设置CSS样式属性作为对象的属性。

// 改变元素的颜色和字体大小  
document.getElementById("demo").style.color = "blue";  
document.getElementById("demo").style.fontSize = "20px";  
  
// 或者使用驼峰命名法  
document.getElementById("demo").style.backgroundColor = "yellow";

3. 修改元素的属性

使用setAttribute()方法来为元素添加或修改属性,使用removeAttribute()方法来移除属性。

// 添加或修改属性  
document.getElementById("demo").setAttribute("href", "https://example.com");  
  
// 移除属性  
document.getElementById("demo").removeAttribute("href");

4. 修改元素的类名

使用className属性来修改元素的类名。如果元素有多个类名,它们应该通过空格分隔。


// 假设我们有一个元素 <div id="myDiv" class="oldClass"></div>  
document.getElementById("myDiv").className = "newClass";  
  
// 如果想要添加或移除类,而不是替换所有类,可以使用classList  
document.getElementById("myDiv").classList.add("anotherClass");  
document.getElementById("myDiv").classList.remove("oldClass");  
  
// 切换类  
document.getElementById("myDiv").classList.toggle("activeClass");

5.修改body元素

 document.body.style.backgroundImage = "url(" + this.src + ")";

 2.修改自定义属性

2.1H5中设置自定义属性、
<div id="userInfo" data-user-id="12345" data-role="admin">用户信息</div>
2.2使用JavaScript修改自定义属性

使用JavaScript的setAttribute()方法来修改自定义属性

使用JavaScript的removeAttribute()方法来移除自定义属性

// 获取元素  
var userInfo = document.getElementById('userInfo');  
  
// 修改自定义属性  
userInfo.setAttribute('data-user-id', '67890');  
userInfo.setAttribute('data-role', 'superadmin');  
  
// 或者,如果你只是想更新已存在的自定义属性的值,上面的方法是可行的。  
// 但如果你想要添加一个新的自定义属性,只需按照上面的方式做即可。  
  
// 如果你想移除一个自定义属性,可以使用 removeAttribute() 方法  
userInfo.removeAttribute('data-role');

可以使用getAttribute()方法来读取自定义属性的值

// 读取自定义属性的值  
var userId = userInfo.getAttribute('data-user-id');  
console.log(userId); // 输出: 67890  
  
// 另一种更现代且方便的方法是使用 dataset 属性,它提供了一个更直接的方式来访问所有以 data-* 开头的属性  
var userId = userInfo.dataset.userId; // 注意:这里不需要 'data-' 前缀  
var role = userInfo.dataset.role; // 如果之前没有被 removeAttribute() 移除的话  
console.log(userId); // 输出: 67890  
console.log(role); // 输出: superadmin(如果之前没有被移除)

 3.节点操作

3.1节点概述

网页中所有内容都是节点(标签、文本、注释、属性等),在DOM中节点使用node表示。

HTML DOM树所有节点都可以通过JS访问,所有HTML元素/节点均可以被修改,也可以被创建或删除。

3.2 创建节点

创建元素节点:使用document.createElement(tagName)方法,其中tagName是要创建的元素的标签名。
创建文本节点:使用document.createTextNode(text)方法,其中text是要创建的文本节点的文本内容。

3.3 插入节点

作为子节点插入:使用parentNode.appendChild(childNode)方法,将childNode作为parentNode的最后一个子节点插入。
在指定子节点前插入:使用parentNode.insertBefore(newNode, referenceNode)方法,将newNode插入到parentNode的子节点列表中referenceNode之前。

3.4 删除节点

使用parentNode.removeChild(childNode)方法,从parentNode中移除childNode。

3.5替换节点

使用parentNode.replaceChild(newChild, oldChild)方法,用newChild替换parentNode中的oldChild。

3.6 复制节点

使用node.cloneNode(deep)方法,其中node是要复制的节点,deep是一个布尔值,指示是否进行深复制(即复制节点及其所有子节点)。

代码演示:

// 创建一个新的<p>元素  
var newParagraph = document.createElement("p");  
  
// 创建一个文本节点,并将其添加到<p>元素中  
var textNode = document.createTextNode("这是一个新的段落。");  
newParagraph.appendChild(textNode);  
  
// 将<p>元素添加到<body>的末尾  
document.body.appendChild(newParagraph);

获取元素节点代码演示:

  • children和childNodes的区别:前者只获取元素节点,后者元素、文本节点都获取
  • firstchild是第一个节点,不管是文本节点还是元素节点
  • firstElementchild是获取第一个子元素节点(有兼容性问题IE9以上支持)

解决兼容性写法,实际开发常用

  //解决兼容性问题写法
  console.log(ol.children[0]); //获取ol的第一个子元素节点
  console.log(ol.children[ol.children.length-1]); //获取ol的最后一个子元素节点

代码示例: 

   var ul=document.querySelector('ul');
  var ol=document.querySelector('ol');
  //获取ol的第一个li节点
  console.log(ol.firstElementChild);
  //获取ol的最后一个li节点
  console.log(ol.lastElementChild); //1.子节点包含元素节点和文本节点
  console.log(ul.childNodes.length);//获取ul的子元素的长度
    for(var i=0;i<ul.childNodes.length;i++){
        console.log(ul.childNodes[i]); // 获取ul的子元素
    }
        console.log(ul.childNodes); // 获取ul的子元素
    console.log(ul.firstChild); //获取ul的第一个子元素
    console.log(ul.lastChild); // 获取ul的最后一个子元素
    //2.children获取所有子元素节点,不包含文本  实际开发中使用children获取子元素节点更方便
    console.log(ul.children.length); // 获取ul的子元素的个数
    for(var i=0;i<ul.children.length;i++){
        console.log(ul.children[i]); // 获取ul的子元素
    }
3.7兄弟节点

1. nextSibling 和 previousSibling

  • nextSibling 属性返回紧跟在指定节点之后的节点(在同一父节点下),无论节点类型如何(包括元素节点、文本节点等)。
  • previousSibling 属性返回指定节点之前的节点(在同一父节点下),同样不考虑节点类型。

返回所有类型的节点,包括空白文本节点和注释节点,用检查节点的 nodeType 属性以确保它是元素节点。

2. nextElementSibling 和 previousElementSibling(IE9兼容)

  • nextElementSibling 属性返回紧跟在指定元素节点之后的元素节点(在同一父节点下),忽略非元素节点。
  • previousElementSibling 属性返回指定元素节点之前的元素节点(在同一父节点下),同样忽略非元素节点

它们直接返回元素节点

   <span>我是2节点</span>
    <div>好好学习,天天向上</div>
    <a href="http://www.baidu.com">baidu </a>
    <script>

        var div = document.querySelector('div');
        var span = document.querySelector('span');
        var a = document.querySelector('a');

        // 获取兄弟节点
        var siblings = div.parentNode.children;
        console.log(siblings);

        // 获取前一个兄弟节点
        var prev = div.previousElementSibling;
        console.log(prev);

        // 获取后一个兄弟节点
        var next = div.nextElementSibling;
        console.log(next);
        //封装一个兼容性的函数
        function getElementSibling(element) {
            var el=element;
            while (el = el.nextElementSibling) {
                if (el.nodeType === 1) {
                    return el;
                }
            }
            return null;
        }
    </script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不懂就问,换毛季猫咪疯狂掉毛怎么办?宠物浮毛该如何清理?

最近天气变热了&#xff0c;每天都30度以上&#xff0c;我家猫狂掉毛&#xff0c;床上、地板上堆积了不少。第一次养猫的我没见过这种阵仗&#xff0c;以为它生病了&#xff0c;连忙带它去看医生。医生告诉我&#xff0c;这是正常的猫咪换毛现象&#xff0c;我才放下心来。原来…

Python代码加密打包发布

本博客主要介绍&#xff1a; 1. 将python代码编译为so&#xff08;win环境是pyd&#xff09; 2.打包生成wheel文件&#xff0c;可以使用pip 进行安装 1. 项目结构 注意&#xff0c;__init__.py文件是必须的&#xff0c;内容可为空 2. example.py 里面是自己写的一些方法&am…

【hot100篇-python刷题记录】【滑动窗口最大值】

R6-子串篇 目录 Max Sort 单调队列法&#xff1a; Max 完了&#xff0c;我好像想到python的max class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:ret[]left,right0,kwhile right<len(nums):ret.append(max(nums[left:right]))ri…

聊聊 PHP 多进程模式下的孤儿进程和僵尸进程

在 PHP 的编程实践中多进程通常都是在 cli 脚本的模式下使用&#xff0c;我依稀还记得在多年以前为了实现从数据库导出千万级别的数据&#xff0c;第一次在 PHP 脚本中采用了多进程编程。在此之前我从未接触过多进程&#xff0c;只知道 PHP-FPM 进程管理器是多进程模型&#xf…

【技术方案】智慧城市大数据平台技术方案(Doc原件)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障体系 4.1 政策…

获发明专利加持,隆道加速推进企业级AI应用落地

近期&#xff0c;北京隆道网络科技有限公司研发的“基于供应链管理的AI采购业务分析装置及方法”获得国家发明专利授权。该项新专利的取得&#xff0c;证明了隆道在AI产业化应用中的技术前瞻性和创新性&#xff0c;也为隆道加速企业级AI应用落地提供了知识产权保障。 根据IBM发…

HTML+CSS+JavaScript制作动态七夕表白网页(含音乐+自定义文字)

源码介绍 一年一度的520情人节/七夕情人节/女朋友生日/程序员表白,是不是要给女朋友或者正在追求的妹子一点小惊喜呢&#xff0c;今天这篇博客就分享下前端代码如何实现HTMLCSSJavaScript制作七夕表白网页(含音乐自定义文字)。赶紧学会了&#xff0c;来制作属于我们程序员的浪…

【OpenCV】基础知识

目录 0 前言1 什么是OpenCV&#xff1f;1.1 OpenCV1.2 OpenCV-Python 2 在线英文文档3 新建项目4 图像读取4.1 读入图像4.2 显示图像4.3 保存图像4.4 Demo4.4.1 Demo14.4.2 Demo24.4.3 Demo3 5 ROI区域 0 前言 使用软件&#xff1a;Anaconda Pycharm VScode OpenCV环境&#…

vulmap No module named ‘thirdparty.urllib3.packages.six.moves‘

问题 今天安装vulmap是发现无论如何安装不了&#xff0c;pip那边明明已经安装好了 后来发现vulmap脚本也有这个东西&#xff0c;后面想了下 最后分析却发现不是pip那边&#xff0c;是vulmap的脚本的’thirdparty.urllib3.packages.six.moves’模块与我这边的pip有些模块冲突了…

“MongoDB AI应用计划 (MAAP)”正式全面推出

助企业弥合AI应用缺口&#xff0c;抢占创新发展制高点 在MongoDB&#xff0c;无论应用场景如何&#xff0c;出发点都是帮助客户解决应用和数据的问题。基于客户沟通与反馈&#xff0c;大多数企业和机构对生成式AI很感兴趣&#xff0c;但不确定如何将概念转化为生产力&#xff…

VSCode的markdown设置目录toc无法显示

如图我设置了目录的语法&#xff0c;但是显示出来并不是我想要的目录格式 想要显示目录&#xff0c;首先需要下载Markdown All in One插件 然后CtrlShiftV&#xff0c;就可以看到目录了

【C++题解】1053 - 求100+97+……+4+1的值。

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1053 - 求10097……41的值。 类型&#xff1a;简单循环 题目描述&#xff1a; 求 10097⋯41 的值。 输入&#xff1a; 无。 输出&#xff1a; 输出一行&#xff0c;即求到的和…

EmguCV学习笔记 C# 6.3 轮廓外接多边形

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

C++ JAVA源码 HMAC计算 openssl 消息认证码计算 https消息防篡改 通信安全

签名和验签 把所有消息按顺序合并成一条信息&#xff0c;对这个信息用密钥进行签名。 签名信息通过 HTTP 头 Sign 传递&#xff0c;没有携带签名或者签名验证不通过的请求&#xff0c;将会被认为异常请求&#xff0c;并返回相应 code 码。 校验方法&#xff1a;根据 http请求…

【嵌入式裸机开发】智能家居入门7:最新ONENET,MQTT协议接入,最全最新(微信小程序、MQTT协议、ONENET云平台、STM32)

智能家居入门7 前言一、ONENET云平台创建产品与设备二、STM32端连接服务器前的准备三、STM32端实现四、微信小程序端连接服务器前的准备五、微信小程序端实现六、最终测试 前言 本篇文章介绍最新ONENET云平台的MQTT协议接入方法&#xff0c;在STM32上实现数据上云与服务器下发…

影像组学与病理组学在鼻咽癌领域的最新研究进展|文献速递·24-08-23

小罗碎碎念 今天这期推文收纳了人工智能在鼻咽癌领域的最新研究进展&#xff0c;既涉及影像组学也涉及病理组学。 在写这期推文的时候&#xff0c;刚好看到了国自然基金放榜的消息&#xff0c;在这里也祝各位关注小罗的老师能如愿上榜&#xff01;&#xff01; 正在积极备战…

LangChain框架深度解析:对Chains组件的全方位探索与实战案例

文章目录 前言一、Chains二、LLMChain⭐1.LLMChain介绍2.LLMChain案例 三、SimpleSequentialChain⭐1.SimpleSequentialChain介绍2.SimpleSequentialChain案例 四、SequentialChain⭐1.SequentialChain介绍2.SequentialChain案例 五、RouterChain⭐1.RouterChain介绍2.RouterCh…

ArcGIS空间自相关 (Global Moran‘s I)——探究人口空间格局的20年变迁

先了解什么是莫兰指数&#xff1f; 莫兰指数&#xff08;Morans I&#xff09;是一种用于衡量空间自相关性的统计量&#xff0c;即它可以帮助我们了解一个地理区域内的观测值是否彼此相关以及这种相关性的强度和方向。 白话版&#xff1a;一句话就是判断数据在空间上有没有自…

ChatGPT3.5/新手使用手册——在线使用详细操作步骤

成长路上不孤单&#x1f60a;【14后小学生一枚&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;今日分享主题【ChatGPT新手使用手册】&#xff0c;需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&…

学习笔记七:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

基于Jenkinsk8sGitDockerHub等技术链构建企业级DevOps容器云平台 安装Jenkins在kubernetes中部署jenkins创建名称空间创建pv,上传pv.yaml创建pvc创建一个sa账号通过deployment部署jenkins更新资源清单文件把jenkins前端加上service&#xff0c;提供外部网络访问 配置Jenkins获取…