【问题标题】:Get an specific value of css class, using d3js使用 d3js 获取 css 类的特定值
【发布时间】:2013-10-07 00:40:14
【问题描述】:

我有一个 HTML 表格,我想设置表格特定部分的颜色(分类为“第一”的单元格的边框顶部颜色)。 要获得颜色,我需要访问 css 类中的特定值。

例子:

表格

<table class="tabla">
    <caption>Title</caption>
      <tr>
        <td class="first">A</td>
        <td class="first">157</td>
      </tr>
</table> 

CSS 这是我需要能够获得颜色的类

.color { fill: #95ccee;
         background-color: #95ccee;
         }

为了实现,我按照下面的方式使用d3.js

var selectTablas = d3.selectAll (".tabla");
    selectTablas.selectAll(".first")
                .style("border-top-color", "Here the function that will get the color");

该函数应循环数据集,并根据“d”获取不同类的不同值。

这里是扩展代码

http://jsfiddle.net/ploscri/dHYcd/

提前致谢。

【问题讨论】:

  • 这里缺少一个重要的部分——你想如何将“d”(我假设是“Diff”列?)映射到颜色?基于范围?某种十六进制转换?差异可能有最大和最小范围吗?您是否有特定的颜色映射方法?如果您添加这些详细信息,我很乐意添加答案:)

标签: javascript html css d3.js


【解决方案1】:

好的,这是我的第一次尝试。这个问题不是很清楚,但是这个函数为您提供了一种将类名传递给它并检索该类的颜色的方法。我用您在问题中的颜色更新了您的示例。我假设您在其他地方有一个函数可以将差异值映射到类名。

http://jsfiddle.net/dHYcd/1/

我在这里做的第一件事是制作一个包含用于测试的颜色的隐藏类的容器。为了从 css 中获取值,它需要存在于 html 中,我假设它已经在某个地方。如果不是,我不知道您为什么要这样做,而不仅仅是在 javascript 中定义颜色。

<div id='colors'>
    <span class='color1'></span>
</div>

接下来,添加您在问题中但不在 jsfiddle 中的 css 声明,但将 fillbackground-color 更改为 color。我还确保隐藏了包含颜色的 div,因此它不会干扰示例。

#colors { display: none }
#colors .color1 { color: #95ccee }

最后,从类中实际获取颜色的函数相当简单。代码转载如下:

function get_color(classname){
    var el = document.querySelector('#colors .' + classname);
    return getComputedStyle(el).getPropertyValue('color');
}

这个函数只是根据你作为参数提供的类名抓取一个元素,然后抓取color的css值。您可以看到,如果您想获得另一个属性值,或者甚至将属性值作为第二个参数添加到函数中,很容易换出 color,但我认为不需要这样做例子。

希望这会有所帮助,如果这不是您想要的,我很抱歉,这个问题有点难以解释。随意添加评论或编辑以澄清问题,我会更新答案以更接近您所追求的(如果我这次没有确定的话)。

编辑

OP 澄清说,他们正在寻找存储颜色值的最佳方法,并认为它会在 css 中。我会说这不是存储颜色值的最佳方式,并建议将它们存储在 javascript 中的对象中,因为它们仅在 javascript 中需要。这是一个更新的小提琴,它以更好的方式存储颜色:

http://jsfiddle.net/dHYcd/2/

如果您将colors.blue 更改为colors.red,您会发现您可以轻松地在不同颜色之间进行切换,而且语法是javascript 原生的。

【讨论】:

  • 谢谢杰夫。对于不清楚的问题,我深表歉意。这是一个更大项目的一小部分。我有具有颜色值的全局 css 类(在我的示例中为“.color”),我使用这些类来设置 DOM 中不同元素的颜色。这适用于允许使用背景颜色或填充属性的对象(有时我使用类来设置 SVG 元素的颜色)。但有时我需要设置元素一部分的颜色(例如边框顶部颜色),我想从类中获取颜色。我不能改变类的结构。有没有办法做到这一点?。
  • 是的,我的整个答案就是这样 - 一个允许您从 CSS 类中获取属性值的函数。里面是不是少了什么东西?如果您让我确切地知道缺少的部分是什么,我们很乐意扩展或澄清。
  • 嗨,杰夫。我需要的是一种在 DOM 中没有元素的情况下获取 css 类的值的方法。在您的答案中,您使用一个元素(#color)从 css 中获取值。我不想在 javascript 中写颜色,因为我想将颜色保存在一个地方,即 css 类。可能我的应用程序方法不是最好的,我不是我想了解它的程序员。还是谢谢。
  • 是的,如果你不打算在 DOM 中拥有一个元素,那么没有理由为它使用 css。我编辑了答案,并在最后添加了我推荐的存储颜色的方法,希望这对您有所帮助!
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2014-06-27
  • 2015-06-13
  • 2019-03-11
  • 2014-01-14
相关资源
最近更新 更多