javascript - 更改 JS 中的类属性 - 更好的性能
问题描述
我有两个类需要即时更改颜色属性。问题是我写的代码非常慢,因为这些类在我的代码中出现超过 100 次。
有什么热门建议可以使此代码性能更好吗?
if (mainColor) {
var elColors = document.querySelectorAll('.color')
elColors.forEach(el => el.style.color = mainColor)
var elBgColors = document.querySelectorAll('.bg-color')
elBgColors.forEach(el => el.style.backgroundColor = mainColor)
}
(mainColor 来自用户输入)
解决方案
为了高性能,不要为每个设置样式。
只需为父节点分配一个新类。
例如:
以动态方式 - JavaScript:
var styles = document.querySelector('head style#dynamic'),
sheet;
if (!styles) {
styles = document.createElement('style');
styles.id = 'dynamic';
document.querySelector('head').appendChild(styles);
}
sheet = styles.sheet;
sheet.insertRule("body.mainTheme .color { color: red; }", 0);
sheet.insertRule("body.mainTheme .bg-color { background-color: blue }", 0);
if (!document.body.className.match(/(^|\s)mainTheme(\s|$)/s)) {
document.body.className = document.body.className + " mainTheme";
}
以静态方式 - JavaScript 部分:
// jQuery: $('body').addClass('mainTheme');
if (!document.body.className.match(/(^|\s)mainTheme(\s|$)/s)) {
document.body.className = document.body.className + " mainTheme";
}
以静态方式 - CSS部分:
.mainTheme .color {
color: red;
}
.mainTheme .bg-color {
background-color: blue
}
推荐阅读
- python-3.x - Beam Pubsub 代码被击中并且没有发布消息
- java - Java 通用表示法,
放 - c# - 选择数据模板中的控件时获取行详细信息
- jenkins - Jenkins 在部署前手动批准电子邮件
- laravel - 中间模型为空时使用间接关系
- google-chrome - iPad Chrome CORS cookie 共享
- javascript - 使用 Javascript 数组索引了解 await
- pine-script - 将 pinescript v2 转换为 v3 时遇到问题
- docusignapi - 如何通过 api 从我的docusign 帐户访问与我共享的文档?
- sql - 如何在执行 INSERT INTO 时在 SELECT 语句期间创建数据?