javascript - Javascript更改样式表中的值
问题描述
我正在寻找一种方法来更改加载到站点中的样式表中颜色的每个实例。我正在使用 Prestashop 并使用大型主题样式表和模块的样式表......所以我正在寻找更改字体颜色和背景颜色。是的,我可以进行搜索和替换……但我想要可重用的代码,可以在多个站点、多个文件和主题上使用。
我一直在这里查看一堆文章,发现一些代码可以选择所有加载的元素并检查 ComputedStyle,如果它等于一个值,则将其更改为新值。
function colorToHex(color) {
if (color.substr(0, 1) === '#') {
return color;
}
var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);
var red = parseInt(digits[2]);
var green = parseInt(digits[3]);
var blue = parseInt(digits[4]);
var rgb = blue | (green << 8) | (red << 16);
return digits[1] + '#' + rgb.toString(16);
};
function changeColor(from, to) {
var elements = document.getElementsByTagName('*');
var to = '#babaff';
var from = '#f66685';
for (var i=0;i<elements.length;i++) {
var color = window.getComputedStyle(elements[i]).color;
var hex = colorToHex(color);
console.log('color=' ,color, elements[i]);
if (hex == from) {
elements[i].style.color=to;
console.log('its a color match!', elements[i]);
}
var backgroundColor = window.getComputedStyle(elements[i]).background;
console.log('bgcolor=' ,backgroundColor);
if (backgroundColor.indexOf('rgba')<0) {
var hex = colorToHex(backgroundColor);
if (hex == from) {
elements[i].style.backgroundColor=to;
}
}
}
}
它部分工作,但似乎不适用于条件值......如悬停或活动状态。所以理想情况下,我只是在寻找能够找到一串文本(十六进制代码)并将其更改出来的东西......它并不关心元素是什么(类,标签,id)并且没关系规则(背景、背景颜色、颜色、边框等),因为这些主题是预先构建的且未标准化。
解决方案
正如你所说:
“理想情况下,我只是在寻找能够找到一串文本(十六进制代码)并将其更改出来的东西”
这基本上就是搜索和替换的作用。(除了十六进制的东西)
如果你正在寻找一个问题,比如在你的整个风格中替换一种颜色,并且它非常耗时 atm,那么你可能做错了什么。
正如@delinear 在他的评论中提到的那样,您可能想要使用 sass 脚本。
在 css 已经加载后使用一些 javascript 来更改所有颜色是性能很重的,而不是真正的方法。我真的会建议 Search&Replace 并在之后使用 sass 变量。(如果您可能想再次更改颜色)
在那里你可以做类似的事情
$color: #ff00ff;
h1{
background-color: $color;
}
h2{
color: $color;
}
h3{
background: linear-gradient(135deg, red, $color);
}
h2:hover{
color: $color;
}
推荐阅读
- python - 将图形从字典形式转换为python中的矩阵
- javascript - 如何将日期字符串从 MM DD YYYY 重新排列为 YYYY MM DD?
- c++ - 通过用 shared_ptr 的向量替换 boost::unordered_map 字符串键来获得性能?
- python - 如何在 Zapier 中使用 Python 解析 HTML?
- reactjs - 我应该在哪里存储我的电子商务 React 应用程序的图像?
- excel - 如何使用 Excel 公式将文本“yyyy mmm ABC”转换为“yyyymm”日期格式?
- mysql - Debian 升级到 Buster 后的 MYSQL 问题
- python - 在 PyArrow 中,如何将表的行附加到内存映射文件?
- dataframe - 检查 DataFrame 名称是否包含另一个数组中的名称
- php - Laravel Http 路由请求永远发送