JavaScript之ClassName属性学习
2023-09-11 14:21:53 时间
在前面的style属性学习中,知道了通过style属性可以控制元素的样式,从而实现了行为层通过DOM的style属性去干预变现层显示的目地,但是这种就是不好的,而且为了实现通过DOM脚本设置的样式,你就不得不花时间去研究JavaScript函数,去寻找对应修改和设置样式的有关语句。而且每添加或修改js脚本的代码量远大于我们修改css样式的代码量。
所以与其使用DOM直接改变莫个元素的样式,不如通过JavaScript代码去更新这个元素的class属性。
下面通过代码来比较这两种方式的差别:
function setStyleHeaderSiblings() { if (!checkCompatibility()) return; //check compatibility var heads = document.getElementsByTagName("h1"); var ele; //defines a element for receive; for (var i = 0; i < heads.length; i++) { ele = getNextElement(heads[i].nextSibling); ele.style.fontWeight = "bold"; ele.style.fontSize = "1.2em"; } }
function setStyleHeaderSiblings() { if (!checkCompatibility()) return; //check compatibility var heads = document.getElementsByTagName("h1"); var ele; //defines a element for receive; for (var i = 0; i < heads.length; i++) { ele = getNextElement(heads[i].nextSibling); ele.className="change"; }
css样式表
.change{
font-weight:bold;
font-size:1.2em;
}
假设我们这个需要给这个效果加上一个background-color:blue;
上面这种做法需要在js里面加如下代码:
ele.style.backgroundColor="blue";
而第二种做法则只要在样式表里加一个样式就可以实现,而且实现了样式与行为的分离,还减少了我们的代码量,所以在后期需求不确定的情况下,我建议第二种方法来动态的修改元素的样式。
但是通过className设置元素的样式也有一个缺陷,那就是通过className设置元素的class属性时将替换(而不是追加)该元素原有的class属性,在实际开发中往往很多时候我们需要追加class;
所以根据这个需要我们可以自定义一个方法来实现追加className的效果代码如下:
function addClass(element,value) { if (!element.className) { element.className = value; } else { newClassName = element.className; newClassName += " "; //这句代码追加的类名分开 newClassName += value; element.className = newClassName; } }
相关文章
- [Javascript] Wait for Multiple JavaScript Promises to Settle with Promise.allSettled()
- [Javascript] Understanding the .constructor property on JavaScript Objects
- [Javascript] Refactoring: Array.prototype by example [filter, some, forEach]
- 在Java中测试javascript
- JavaScript 消息框,警告框,确认框,提示框
- [Javascript] Filter out Duplicates from Flat JavaScript Array with array.filter / reduce / Set
- [Javascript] Natively Format JavaScript Dates and Times
- [Javascript] Create Your First Iterator in JavaScript
- [Javascript] Link to Other Objects through the JavaScript Prototype Chain
- [Javascript] Iterate Over Items with JavaScript's for-of Loop
- [Javascript] Task queue & Event loop.
- [Javascript] What is JavaScript Function Currying?
- [Javascript] Hoisting in JavaScript
- es6 javascript的class的静态方法、属性和实例属性
- JavaScript中this的理解
- JavaScript里类和私有属性的两种实现方式
- Atitit.js模块化 atiImport 的新特性javascript import
- JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
- 给JavaScript的单个对象定义属性和属性的元数据
- 【JavaScript变量】Javascript的全局变量&局部变量
- javascript案例40——tab导航栏(切换、添加、删除、修改)综合案例(es6面向对象、类的使用)
- JavaScript 设计模式与开发实践读书笔记
- 从零开始学_JavaScript_系列(24)——查看对象属性,合并数组
- 从零开始学_JavaScript_系列(六)——CSS的padding、margin、border属性超详细解释(图文)
- Web前端 | JavaScript(DOM编程)
- JavaScript脚本引擎SpiderMonkey
- web前端Javascript开发学习之JavaScript中的预编译如何进行