在 Javascript 中获取 Bootstrap 的当前主题颜色



我的目标是使用与当前选择的 Bootstrap 4 主题匹配的颜色chart.js创建图表(该网站有多个可用主题(

我目前的策略是在页面上拥有每种颜色的徽章:

<div id="color-example-badge-primary" class="badge badge-primary" ></div >
<div id="color-example-badge-warning" class="badge badge-warning" ></div >
<div id="color-example-badge-danger" class="badge badge-danger" ></div >
<div id="color-example-badge-secondary" class="badge badge-secondary" ></div >
<div id="color-example-badge-light" class="badge badge-light" ></div >
<div id="color-example-badge-success" class="badge badge-success" ></div >
<div id="color-example-badge-info" class="badge badge-info" ></div >
<div id="color-example-badge-dark" class="badge badge-dark" ></div >

然后使用 jQuery 将背景颜色拉取到数组中:

var themeColors = [$("#color-example-badge-primary").css('backgroundColor'),
$("#color-example-badge-warning").css('backgroundColor'),
$("#color-example-badge-danger").css('backgroundColor'),
$("#color-example-badge-secondary").css('backgroundColor'),
$("#color-example-badge-light").css('backgroundColor'),
$("#color-example-badge-success").css('backgroundColor'),
$("#color-example-badge-info").css('backgroundColor'),
$("#color-example-badge-dark").css('backgroundColor')
];

然后,我可以将此数组提供给chart.js以创建具有主题颜色的图表。

有没有更好的方法可以使用Javascript从CSS中获取当前的主题颜色?还是没有办法不创建一个 DOM 元素并测试它的背景颜色?

如果有一个简单的方法可以在不处理DOM元素的情况下使用Javascript获取CSS规则,那就太好了。

Bootstrap 将其主题颜色也存储在:root元素的 CSS 变量中。

更合适的方法是使用getComputedStyle()getPropertyValue('--variable')提取这些颜色

const style = getComputedStyle(document.body);
const theme = {
primary: style.getPropertyValue('--primary'),
secondary: style.getPropertyValue('--secondary'),
success: style.getPropertyValue('--success'),
info: style.getPropertyValue('--info'),
warning: style.getPropertyValue('--warning'),
danger: style.getPropertyValue('--danger'),
light: style.getPropertyValue('--light'),
dark: style.getPropertyValue('--dark'),
};
console.log(theme);
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<div class="container"></div>

现在你可以得到这些使用这些颜色与JavaScriptjQuery

如下
element.style.backgroundColor = theme.primary; // Javascript
$(element).css('background-color', theme.primary); // jQuery

对于引导程序 5

Bootstrap 5将其重命名为属性,以将上述代码与 Bootstrap 5 一起使用,请参见下面的示例

const style = getComputedStyle(document.body);
const theme = {
primary: style.getPropertyValue('--bs-primary'),
secondary: style.getPropertyValue('--bs-secondary'),
success: style.getPropertyValue('--bs-success'),
info: style.getPropertyValue('--bs-info'),
warning: style.getPropertyValue('--bs-warning'),
danger: style.getPropertyValue('--bs-danger'),
light: style.getPropertyValue('--bs-light'),
dark: style.getPropertyValue('--bs-dark'),
};
console.log(theme);
<!-- JavaScript Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<div class="container"></div>

使用document.body.getElementsByTagName("*")获取body中的所有 DOM,并循环获取所需的内容

$(document).ready(function(){
var items = document.body.getElementsByTagName("*");
var arr=[];
for (var i = 4, len = items.length; i < len; i++) {
arr.push(document.getElementById(items[i].id)!=null?$('#'+items[i].id).css('backgroundColor'):"");
}
console.log(arr)
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

<div id="color-example-badge-primary" class="badge badge-primary" >a</div >
<div id="color-example-badge-warning" class="badge badge-warning" >a</div >
<div id="color-example-badge-danger" class="badge badge-danger" >a</div >
<div id="color-example-badge-secondary" class="badge badge-secondary" >a</div >
<div id="color-example-badge-light" class="badge badge-light" >a</div >
<div id="color-example-badge-success" class="badge badge-success" >a</div >
<div id="color-example-badge-info" class="badge badge-info" >a</div >
<div id="color-example-badge-dark" class="badge badge-dark" >a</div >

最新更新