首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >D3.js如何在使用函数时应用多个类

D3.js如何在使用函数时应用多个类
EN

Stack Overflow用户
提问于 2013-04-19 18:26:18
回答 3查看 27.9K关注 0票数 22

我目前正在使用D3.js,并且遇到了一个我似乎无法解决的问题。

我有一个CSV,它有一个名为"Set“的列和一个名为"Year”的列。我想从这些列中提取值并将其用作类名。这是我目前所拥有的.

代码语言:javascript
复制
var circle = svg.selectAll("circle")
            .data(data)
            .enter()
            .append("circle")
            .attr("class", function(d) {
                if (d["Set"] == 1)
                {
                    return "set-1";
                }
                if (d["Set"] == 2)
                {
                    return "set-2";
                }
            });

这可以很好地工作,并为每个数据点提供一个类名。然而,当我尝试以下操作时,"Set“类名被"Year”类名覆盖。

代码语言:javascript
复制
var circle = svg.selectAll("circle")
            .data(data)
            .enter()
            .append("circle")
            .attr("class", function(d) {
                if (d["Set"] == 1)
                {
                    return "set-1";
                }
                if (d["Set"] == 2)
                {
                    return "set-2";
                }
            .attr("class", function(d) {
                if (d["Year"] == 2012)
                {
                    return "2012";
                }
                if (d["Year"] == 2013)
                {
                    return "2013;
                }
            });

如何纠正这段代码,使其添加额外的类名,而不是覆盖它们。

希望有人能帮上忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-19 18:45:32

你只是想要一个能同时做这两件事的函数,不是吗?一些类似的东西也许..。

代码语言:javascript
复制
var circle = svg.selectAll("circle")
        .data(data)
        .enter()
        .append("circle")
        .attr("class", function(d) {
            var c = "";
            if (d["Set"] == 1)
            {
                c = "set-1";
            }
            if (d["Set"] == 2)
            {
                c = "set-2";
            }
            if (d["Year"] == 2012)
            {
                c += " 2012";
            }
            if (d["Year"] == 2013)
            {
                c += " 2013;
            }
            return c;
        });
票数 17
EN

Stack Overflow用户

发布于 2013-04-19 20:05:58

还有一种替代方法可能会很有用。可以使用selection.classed('class-name', true)selection.classed('class-name', false)从元素中分配或删除类

代码语言:javascript
复制
var circle = svg.selectAll("circle")
    .data(data)
    .enter()
    .append('circle')
    .classed('2012', function(d) { return d['Year'] === 2012; })
    .classed('2013', function(d) { return d['Year'] === 2013; })
    .classed('set-1', function(d) { return d['Set'] === 1; })
    .classed('set-2', function(d) { return d['Set'] === 2; });

我更喜欢这种方式,因为您可以使用相同的语法从元素中删除类。

票数 64
EN

Stack Overflow用户

发布于 2014-07-19 15:08:27

更新

这种方法似乎不再适用于D3.js v5+

原始答案

您还可以使用散列作为classed函数的参数:

代码语言:javascript
复制
var circle = svg.selectAll("circle")
  .data(data)
  .enter()
  .append('circle')
  .classed({
    '2012': function(d) { return d['Year'] === 2012; },
    '2013': function(d) { return d['Year'] === 2013; },
    'set-1': function(d) { return d['Set'] === 1; },
    'set-2': function(d) { return d['Set'] === 2; }
  });
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16102505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档