【问题标题】:Get Bootstrap's current theme colors in Javascript在Javascript中获取Bootstrap当前主题颜色
【发布时间】:2019-03-07 07:25:53
【问题描述】:

我的目标是使用与当前选择的 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 元素并测试它的背景颜色?

如果有一种简单的方法可以使用 Javascript 获取 CSS 规则而无需处理 DOM 元素,那就太好了。

【问题讨论】:

标签: javascript jquery css bootstrap-4


【解决方案1】:

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

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

var style = getComputedStyle(document.body);
var theme = {};

theme.primary = style.getPropertyValue('--primary');
theme.secondary = style.getPropertyValue('--secondary');
theme.success = style.getPropertyValue('--success');
theme.info = style.getPropertyValue('--info');
theme.warning = style.getPropertyValue('--warning');
theme.danger = style.getPropertyValue('--danger');
theme.light = style.getPropertyValue('--light');
theme.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

【讨论】:

    【解决方案2】:

    使用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 >

    【讨论】:

    • 为什么要获取所有 DOM 元素?那根本没有必要。它使事情变得复杂。
    • 你只是一个例子,如何循环所有的操作可以将它包装在一个 div 中并获取这个 div 中的所有元素并循环它们
    猜你喜欢
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2014-05-17
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多