JavaScript高级进阶(五)

操作节点属性

设置属性(先找属性再操作)

     setAttribute()方法添加指定的属性,并为其赋指定的值

     语法:

     element.setAttribute(attributename/属性名,attributevalue/属性值)

例:

<style>

    .box{

        width: 200px;

        height: 200px;

        background-color: skyblue;

    }

</style>

<body>

    <div></div>

</body> 

<script>

    var div_ =document.querySelector("div");//找到元素

    // 方法1

    div_.setAttribute('class','box')//给元素添加了一个类名

</script>

就一个简单的div,背景样式加了个天蓝色,可是我们在body标签内部是没有添加什么属性的,它没有这个样式对应的class属性,如何使这个样式生效?

在js中我们首先找到这个元素,再使用setAttribute方法给它添加了一个值为box的class属性

 在后台我们也看到这个属性值加上去了,对应上面的样式也生效了。

    div_.style.backgroundColor='red'

在js中我们再次对样式进行操作,发现变红了。

有人说,这我可太清楚了,因为代码从上到下执行!

真的是这样吗?

div_.style.backgroundColor = 'red'; // 先设为红色

div_.setAttribute('class', 'box'); // 再添加类名(skyblue 会覆盖红色)

我们交换js中这两行代码,结果发现

 还是红色,没有被覆盖!

我们先回顾一下CSS优先级规则:

内联样式(style 属性) > ID 选择器 > 类/属性/伪类选择器 > 标签选择器

如果优先级相同,后定义的样式会覆盖前面的样式。

JavaScript 操作的是内联样式

div_.style.backgroundColor = 'red' 是通过 JS 直接操作元素的 style 属性(内联样式),它的优先级天然高于外部或 <style> 标签中的 CSS 规则(比如 .box 的样式)

所以CSS优先级才是根本原因!

不过这里有一个误区内联样式一旦设置,除非手动清除或覆盖,否则类样式无法覆盖它。(

!important 可以打破这个规则,如:

.box {

    background-color: skyblue !important; /* 强制覆盖内联样式 */

}

)

回到我们之前写的那个例子,还有第二种添加属性的方法:

<style>

    .box{

        width: 200px;

        height: 200px;

        background-color: skyblue;

    }

</style>

<body>

    <div></div>

</body> 

<script>

    var div_ =document.querySelector("div");//找到元素

//方法2

    div_.className="box"

</script>

 box属性值一样老老实实被添加好了,这种方法作为替代方案,看场景来用,某些常用属性(如 id、class、href)可以直接通过 DOM 对象的属性赋值:

element.id = "newId";

element.className = "active"; // 注意:class 是保留字,需用 className

像img也可以用这两种方法添加src属性:

<body>

    < img alt="">

</body> 

<script>

    var img_ =document.querySelector("img");//找到元素

   //方法1  img_.setAttribute('src','./images/11573144197-1_b_1724033544.jpg')

 //方法2

img_.src="./images/11573144197-1_b_1724033544.jpg"

</script>

 src属性都很完美的添加上去了,这就是设置节点属性这部分。

获取属性

 <!-- 获取属性 -->

     getAttribute()返回指定属性名的属性值。

     语法:

     element.getAttribute(attributename);//attributename(必须):需要获得属性值的属性名称。

就用我们前面写的img的例子:

<body>

     < img alt="">

</body> 

<script>

    var img_ =document.querySelector("img");

    img_.src="./images/11573144197-1_b_1724033544.jpg"

</script>

src属性已经设置上了,我们就用getAttribute获取这个属性:

 var src_=img_.getAttribute('src')

    console.log(src_);

 这里也可以直接:var src_=img_.src,都可以拿到完整的路径。

删除属性

removeAttribute()方法删除指定的属性

    语法:element.removeAttribute(attributename)//attributename:要删除的属性名称

秉承复用性原则,还是使用我们前面写的img例子:

<body>
     < img alt="">
</body> 
<script>
    var img_ =document.querySelector("img");
    img_.src="./images/11573144197-1_b_1724033544.jpg"
</script>

src属性已经设置好了,使用removeAttribute将其删除。

  img_.removeAttribute('src')

删除属性连带属性值一起都删除了,如果:

<body>

     < img alt="">

</body> 

<script>

    var img_ =document.querySelector("img");

    img_.src="./images/11573144197-1_b_1724033544.jpg"

    // img_.removeAttribute('src')

    var body_=document.getElementsByTagName('body')[0]

    body_.removeChild(img_);

</script>

这样就是直接将img节点删除了。

 body中已经什么都没有了,总结想操作属性节点,首先要找到这个节点在进行对应操作。

除了上面这些重要的,还有一些补充:

 

标准属性操作方法

①element.hasAttribute(name)

作用:检查元素是否具有指定的属性。

返回值:true(存在)或 false(不存在)。

例如:

const div = document.querySelector("div");

console.log(div.hasAttribute("class")); // true 或 false

②element.toggleAttribute(name [, force])

作用:切换属性的存在状态(存在则移除,不存在则添加),

name:属性名。

force(可选):布尔值,true 表示强制添加,false 表示强制移除。

 

data-* 自定义属性(推荐)

html:

<div id="user" data-id="123" data-role="admin"></div>

js:

const user = document.querySelector("#user");

// 获取

console.log(user.dataset.id); // "123"

console.log(user.dataset.role); // "admin"

// 设置(直接覆盖或添加)

user.dataset.role = "guest"; // 修改 data-role

user.dataset.status = "active"; // 新增 data-status

// 删除

delete user.dataset.role; // 移除 data-role

 

操作 class(推荐 classList)

const div = document.querySelector("div");

// 添加类

div.classList.add("active");

// 移除类

div.classList.remove("box");

// 切换类

div.classList.toggle("hidden");

// 检查是否包含类

console.log(div.classList.contains("active")); // true/false

 

还有一些操作布尔属性什么的就不提了,用到的比较少,好了,这就是操作节点属性这一部分。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构每日一题day13(链表)★★★★★

题目描述&#xff1a;采用尾插法在头指针L处建立一个带头结点的单链表,输入-1表示结束结果返回建立的单链表。 算法思想&#xff1a; 1.初始化链表&#xff1a;创建一个头结点&#xff08;不存储实际数据&#xff09;&#xff0c;头指针 L 指向该头结点。初始时&#xff0c;头…

第十六届蓝桥杯 2025 C/C++组 破解信息

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P12344 [蓝桥杯 2025 省 B/Python B 第二场] 破解信息…

【Linux网络】深入解析I/O多路转接 - Select

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

MongoDB的下载安装与启动

MongoDB的下载安装与启动&#xff0c; 一、MongoDB下载安装 1. 官网下载 打开官网&#xff1a;https://www.mongodb.com/try/download/community选择&#xff1a; 版本&#xff08;Version&#xff09;&#xff1a;选最新版或者根据需要选旧版。平台&#xff08;OS&#xff0…

Docker 容器虚拟化技术和自动化部署

Docker 容器虚拟化技术和自动化部署 一、Docker 核心组件1.1 Docker 引擎1.2 Docker 镜像1.3 Docker 容器1.4 Docker 仓库 二、Docker 环境安装清华镜像安装 三、Docker 基本操作3.1 镜像管理3.1.1 查看本地镜像 docker images3.1.2 添加镜像标签 docker tag3.1.3 查看镜像信息…

MaxScript二维图形布尔(并)运算

以下脚本演示了在 3ds Max 中使用 MaxScript 进行二维图形的布尔并运算&#xff08;Union&#xff09;。该脚本创建两个圆形&#xff08;obj_a 和 obj_b&#xff09;&#xff0c;并通过 ShapeBooleanObject 将它们合并为一个新的样条线对象 obj_boolean。运行此脚本后&#xff…

【Linux实践系列】:进程间通信:万字详解命名管道实现通信

&#x1f525; 本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 与其等待完美的风&#xff0c;不如学会在逆风中调整帆的角度——所有伟大航程都始于此刻出发的勇气 ★★★ 本文前置知…

【数据结构】二叉搜索树

数据结构系列五&#xff1a;Map与Set(三) 二叉搜索树 一、搜索原理&#xff08;有序维护&#xff09; 1.插入 2.删除 2.1单子树节点 2.2双子树节点 二、搜索性能 1.排成完全二叉树 2.排成链表 二叉搜索树 每个节点都经过 整体搜索比较排 维护组成的有序树是二叉排序树…

【无标题】

一、Matplotlib 基础认知 功能特性&#xff1a;是 Python 强大的绘图库&#xff0c;能将数据以多样化的图表形式呈现&#xff0c;涵盖静态、动态和交互式图表&#xff0c;支持多种输出格式&#xff0c;满足不同场景下的数据可视化需求。 二Matplotlib Pyplott 函数绘图技巧&a…

wangEditor 移除表情包菜单项的配置步骤‌

wangEditor 移除表情包菜单项的配置步骤‌ 1. 确认表情包菜单项的 Key‌‌2. 配置 excludeKeys 排除表情包‌‌3. 验证配置生效‌注意事项‌ 1. 确认表情包菜单项的 Key‌ ‌默认 Key 为 emotion‌&#xff1a;根据工具栏默认配置&#xff0c;表情包菜单项的 Key 为 emotion。…

正则表达式详解

文章目录 1. 正则表达式基础1.1 什么是正则表达式1.2 为什么需要学习正则表达式1.3 Java中的正则表达式支持2. 正则表达式语法2.1 基本匹配2.2 元字符2.2.1 常用元字符2.2.2 转义字符2.2.3 字符类2.2.4 预定义字符类2.2.5 量词2.3 贪婪与非贪婪匹配2.4 分组与捕获2.4.1 命名分组…

MLLM之Bench:LEGO-Puzzles的简介、安装和使用方法、案例应用之详细攻略

MLLM之Bench&#xff1a;LEGO-Puzzles的简介、安装和使用方法、案例应用之详细攻略 目录 LEGO-Puzzles的简介 1、LEGO-Puzzles的特点 LEGO-Puzzles的安装和使用方法 1、安装 步骤 0&#xff1a;安装 VLMEvalKit 步骤 1&#xff1a;设置 API 密钥&#xff08;可选&#xf…