整理总结:JS DOM中对className的选择,添加和删除

JSX本质解析:不是HTML,而是React.createElement语法糖 JSX是React中用于描述UI的JavaScript语法扩展,其核心并非HTML模板,而是一种可编译为React.createElement()调用的声明式语法糖。它将UI结构映射为虚拟DOM节点对象,使组件渲染完全运行在JavaScript语义体系内,从而支持条件判断、循环遍历、函数组合等原生JS能力。这种设计奠定了React声明式编程、状态驱动视图、高效diff更新的技术价值,广泛应用于单页应用、动态仪表盘、富交互后台系统等场景。理解JSX与HTML的本质差异及编译原理,是掌握React组件化开发、P 阅读详情
  1. 对相同className的元素的选择
/*方法*/
function getByClass(oParent, sClassName) {
    var aEls = oParent.getElementsByTagName("*"); //选择确定父元素内所有元素
    var arr = [];
    for (var i = 0; i < aEls.length; i++) {
        var aClassName = aEls[i].className.split(' '); //将所选元素的classname拆分为数组
        for (var j = 0; j < aClassName.length; j++) {//遍历这个数组进行判断
            if (aClassName[j] == sClassName) { 
                arr.push(aEls[i]); //将含有要找的className的元素存在数组中
            }
        }
    }
    return arr; //得到在确定父元素下具有某个className的所有元素,然后就可以方便的调用了
}

例如:

<!--我的html部分-->
<style>
p{width:100px;height:20px;background-color: yellow;}
</style>
<title>studyUp</title>
<body>  
<div>
    <p class="cnp cnp1"></p>
    <p class="cnp cnp2"></p>
    <p class="cnp3"></p>
</div>
/*我的js部分*/
var oDiv=document.getElementsByTagName('div')[0];
var aCnp=getByClass(oDiv,"cnp");
for (var i = 0; i < aCnp.length; i++) {
    aCnp[i].innerHTML="123";
};

实现效果:(要在class=”cnp”的元素里写上123)
这里写图片描述

2.对className的添加

/*方法*/
function addClass(obj, className) {

    if (obj.className == "") {
        obj.className = className;
    } else {
        var arr = obj.className.split(" ");//利用class间的空格将其拆分为数组
        if (arrIndexOf(arr, className) == -1) {//这个元素里面已经存在另外的class的判断
            obj.className += " " + className;
        }
    }
}
//判断一个数组中的某一个值是否存在,存在返回相应的位置否则返回-1;
function arrIndexOf(arr,aValue){
    for(var i=0;i<arr.length;i++){
        if(arr[i]==aValue){
            return i;
        }
    }
    return -1;
}

例如:

<!--我的html部分-->
<div>
    <p class="cnp cnp1"></p>
    <p class="cnp cnp2"></p>
    <p class="cnp3" id="p3"></p>
</div>
/*我的js部分*/
var oP3=document.getElementsByTagName('p3');
addClass(p3,"cnp");

实现效果:(第三个p标签中多了cnp的类名)
这里写图片描述

3.对className的删除

/*方法*/
function removeClass(obj, sClassName) {
    var arr = obj.className.split(" ");
    if (arrIndexOf(arr, sClassName) != -1) {
        arr.splice(arrIndexOf(arr, sClassName), 1);
        obj.className=arr.join(" ");
        //删除这个类名并将整个类名组重新转为字符串
    }
}

例如:

<!--我的html部分-->
<div>
    <p class="cnp cnp1"></p>
    <p class="cnp cnp2"></p>
    <p class="cnp3" id="p3"></p>
</div>
/*我的js部分*/
var oP3=document.getElementsByTagName('p3');
removeClass(p3,"cnp3");

实现效果:(第三个p标签中的class不见了)
这里写图片描述

Ruby‘s Louvre:IE6时代DOM操作契约化实践 DOM操作契约化是一种将HTML元素属性(如data-*)与JavaScript行为显式绑定的工程范式,其核心原理是通过约定式语义标签(如data-louvre-action、data-louvre-id)替代硬编码选择器和散落回调,实现事件委托、状态同步与局部刷新的可预测控制。该模式在jQuery主流但框架缺位的年代,为兼容IE6等老旧环境提供了轻量、可控、零构建的落地路径,技术价值在于以极低学习成本换取高可维护性与跨项目复用性。典型应用场景包括政务/金融类长生命周期后台系统、需渐进式迁移的老项目改造,以 阅读详情

相关推荐

原生JavaScript购物车实现:从事件委托到LocalStorage的完整实战

在Web前端开发中,JavaScript是实现动态交互的核心技术,其核心原理在于通过DOM操作和事件处理响应用户行为,实现数据与视图的同步。这种技术价值在于能够构建丰富、响应式的用户体验,是构建电商、社交、管理后台等各类Web应用的基础。事件委托作为一种高效的事件处理模式,能够优化性能,尤其适用于动态生成的元素;而LocalStorage则提供了浏览器端数据持久化的能力,是实现无后端数据存储的关键。本文聚焦于购物车这一经典应用场景,详细解析如何运用原生JavaScript数组遍历、事件委托机制,结合Loca

weixin_33937778的博客 353

JS之元素属性的修改和classname属性的添加

删除某个属性 //原生js document.getElementById('test1').removeAttribute('属性名'); //Jquery $('.classname').removeAttr('data-invalid=""'); 给classname添加值 原:class="js-passenger-lastName"; document.getElementById.....

萝小洛 3562

手把手教你逆向京东搜索接口:H5ST 556位参数生成与V8补环境技巧

本文深入解析了京东搜索接口中关键的H5ST 556位参数生成机制,并提供了详细的逆向实战指南。针对其复杂的反爬虫环境检测,文章重点介绍了通过链式补环境技巧,在Node.js中完整模拟浏览器环境(包括原型链检测和指纹验证)的方法,帮助开发者成功绕过防护并生成有效参数。

weixin_29315091的博客 482

className 与 classList 的区别 / setAttribute和add的区别

className 与 classList 的区别 1,所有浏览器都支持className属性 classList是HTML5新增,对IE浏览器并不友好,IE10+与其他主流浏览器支持此属性。 2,className属性返回值是一个字符串,内容就是HTML元素的class属性内容。 classList属性返回一个包含指定元素所有样式类的集合对象。 3,.className的返回值就是包含元素cla...

weixin_43748930的博客 3026

Visio 2013 Professional密钥安装激活全攻略:版本匹配与故障排查

产品密钥是软件授权体系中的核心凭证,用于验证用户对软件的使用权限。在微软Office产品线中,Visio 2013 Professional采用25位字符的密钥机制,通过联网或电话方式完成激活。正确使用密钥不仅能确保软件功能完整,还能避免因授权问题导致的工作中断。对于企业IT运维和个人用户而言,掌握密钥类型辨析、安装包匹配规则以及激活失败排查方法,是保障老版本软件稳定运行的关键。本文围绕Visio 2013 Professional,详细讲解密钥输入、激活流程及常见错误代码处理,帮助读者高效完成部署与维护。

weixin_28487433的博客 332

TSMC 65nm PDK衬底文件转换避坑记:从.itf到.itd,解决ADS导入乱码与金属层缺失

本文详细解析了TSMC 65nm PDK衬底文件从.itf到.itd转换过程中的常见问题及解决方案,包括ADS导入乱码与金属层缺失的修复方法。通过环境准备、文件定位、转换操作和问题诊断的完整流程,帮助工程师高效完成衬底文件转换,确保电磁仿真精度。

weixin_30855099的博客 301

js添加类名的两种方法

1.通过className来添加、删除类名 添加类名 获取元素.className = "类名1 类名2 ..."多个类名用空格隔开 移除类名 获取元素名.className = " "直接等于一个空字符串即可删除类名 2.通过classList来添加、删除类名 添加一个类名 获取元素名.classList.add("类名"); 添加多个类名用逗号隔开 获取元素名.classList..add("类名1","类名2","类名3",...); 每个类名需要用引号引起来 移除一个类名 获取元素名.classLi

想好了再写! 3万+

车联网ECU、TSP与TBOX通信流程

对比维度ECU(电子控制单元)BMS(电池管理系统)应用场景传统燃油车 + 新能源汽车仅限新能源汽车核心作用控制整车各系统运行管理动力电池安全与寿命车联网角色数据采集与传输的核心载体提供电池相关的核心数据。

tecoes的博客 1232

JS——DOM操作(className属性)

简单介绍className: className 属性:设置或返回元素的 class 属性 看下面一个简单的例子(给className设置样式变化案例),效果如下图: 代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-...

weixin_30340353的博客 592

喷涂机器人系列编程:ABB IRB 5500_(7).喷涂质量控制与优化

通过编程手段对ABB IRB 5500喷涂机器人进行质量控制和优化,可以显著提高喷涂的均匀性和附着力,减少涂层缺陷。具体的方法包括喷涂参数的调整、路径规划的优化、喷涂效果的检测与反馈,以及喷涂参数的动态调整。综合评估系统可以进一步确保喷涂质量的稳定性和一致性,帮助汽车制造企业提高产品质量和生产效率。

zhubeibei168的博客 851

OpenMVS :用 colmap制作自己的数据集 重建(用colmap计算位姿,将位姿转为MVS需要的格式)

数据集制作主要是在windows进行,比较方便。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3325

React中给Dom节点添加多个className

方法1 <div className={value.class + " " + value.class2}>{value.value}</div> 方法2(中间必须用空格隔开) <div className={`${value.class} ${value.class2}`}>{value.value}</div>

嘘...一只bug 1010

AI摄影师:自动构图与修图算法设计

AI摄影师:自动构图与修图算法设计​ ,人工智能,计算机视觉,大模型,AI,AI 摄影师的核心能力体现在两方面:自动构图(通过算法优化画面元素布局)与智能修图(自动调整光影、色彩、细节)。例如,手机摄影中的 “AI 构图建议” 功能可实时框选最佳拍摄区域,修图软件中的 “一键增强” 能在 0.1 秒内完成专业级调色,这些都依赖于计算机视觉与深度学习的深度融合。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 16万+

【实用总结】DOM节点className操作

经常用到的小工具函数,每次用到都重写一遍,有点浪费体力,于是决定分阶段整理下,需要用到的时候就直接拷过来用了~ 对于dom节点的className,常用操作不外乎增、删、查(改可以用增+删事先),由于代码比较简单,直接上源码+接口注释 /** * @description 给节点添加类 * @param {DOMObject} node dom节点 * @param ...

dengrong8117的博客 306

Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案

本博客在总结这些问题及其解决方案,为遇到类似问题的兄弟提供参考,如果我后续有碰到其他Docker 问题也会在此更新补充。

我其实什么都不会 1646

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

使用js对class(类名)增删改查的好办法,不要只用会className和jQuery啦

js修改样式的方法 1、对象.className(‘类名’) 2、setAttribute(),getAttribute()和removeAttribute() 3、JQuery的addClass()、removeClass() 使用js来对类名进行增删改查以便到达我们需要的功能,这是一个很实用的操作。 但当我们需要设置多个类名时,原生的可能比较多人熟知的className()就不能用了,因为它会覆盖,不能在原有的类名上增加,很鸡肋! 原生js的setAttribute()

m0_47974640的博客 5614

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

对于DOM的相关学习整理

20.DOM (浏览器环境下测试) 文档对象模型,浏览器提供api(html元素->js对象)通过api进行dom操作(追加节点,删除节点,动态改变属性) 1)体系结构 Object Node Element Document Text Comment HTMLElement HTMLDIVElement 1.Node 节点元素,在html中所有的标签都可以被称为是节点 Node是构造函数 1)实例化 浏览器在加载html的时候已经完成了节点的实例化,只需要document.xxx方法获

all_outD的博客 199

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

开发小技巧之调试DOM

开发小技巧之调试移开消失的元素引言伪类增删className增删DOM总结 引言     大多数小伙伴都遇到过一种调试情况,想调试页面中的某个元素,查看该元素的样式或者其他信息。鼠标移上去的时候或者点击的时候存在,移开就消失了,以至于不能用选择页面元素工具查看。今天就来整理一下什么功能会出现这种情况,以及该如何调试这种情况的元素。 伪类 最常见的也是最普通的...

rudy_zhou的博客 1662

【精简】Web API--DOM获取元素

dom-获取元素

GUIDM的博客 662

react classname多个_React 入门儿

共计 10137 字,阅读时长约 25 分钟谁都没有看见过风,更不用说你和我了。但是当纸币在飘的时候,我们知道那是风在数钱。React 影响着我们工作的方方面面,我们每天都在使用它,只窥其表却难以窥其里。正所谓看不如写,本篇文章的目的就是从原理层面探究 React 是如何工作的。工具—在写文章之前,为了方便理解,我准备了一个懒人调试仓库 simple_react[1] ,这个仓库将 be...

weixin_39907316的博客 270

react classname多个_React 入门

共计 10137 字,阅读时长约 25 分钟谁都没有看见过风,更不用说你和我了。但是当纸币在飘的时候,我们知道那是风在数钱。React 影响着我们工作的方方面面,我们每天都在使用它,只窥其表却难以窥其里。正所谓看不如写,本篇文章的目的就是从原理层面探究 React 是如何工作的。工具—在写文章之前,为了方便理解,我准备了一个懒人调试仓库 simple_react[1] ,这个仓库将 be...

weixin_39945445的博客 772

JS基础部分学习笔记

整理了下之前JS的学习笔记,基础部分的知识。 1.className 设置标签的css类的时候不能直接使用class,而是className。 2.设置元素属性的方法 一种是使用 . 一种是使用中括号,使用变量设置css属性值的时候,不能直接写成div1.style.name,应该写成div1.style[name],name是个变量。 例如:div1.style[‘name’],div1.style.height,div1.style.width,变量不用加引号,加引号就是字符串了,例如:div1.s

159

原生js 样式的操作整理

内联样式的获取 function getStyle(obj,attr){//简单的获取内联样式 return obj.currentStyle?obj.currentStyle[attr]:obj.getComputedStyle(obj,false)[attr]; } 下面是比较完善的, //参考地址 http://stylechen.com/getstyle2...

weixin_30266829的博客 116

react classname多个_React 是如何工作的

共计 10137 字,阅读时长约 25 分钟谁都没有看见过风,更不用说你和我了。但是当纸币在飘的时候,我们知道那是风在数钱。React 影响着我们工作的方方面面,我们每天都在使用它,只窥其表却难以窥其里。正所谓看不如写,本篇文章的目的就是从原理层面探究 React 是如何工作的。工具—在写文章之前,为了方便理解,我准备了一个懒人调试仓库 simple_react[1] ,这个仓库将 be...

weixin_39624389的博客 125
上一篇: JS中常用Math对象常用方法的整理
下一篇: 移动端头部代码解释
Dorui
博客等级 码龄9年 8粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值