javascript - 如何用一个值函数设置多个属性?

标签 javascript d3.js attributes

给定包含多个数据元素的数据,例如对象或数组,是否可以使用单个值函数在选择上设置多个属性?

例如像这样的东西:

var data = [{ 'x': 10, 'y': 20, 'r': 5 }];
d3.select('body').append('svg').selectAll('circle')
    .data(data)
    .enter().append('circle')
    .attr('cx cy r', function (d) {
        return [d.x, d.y, d.r];
    });

代替:

var data = [{ 'x': 10, 'y': 20, 'r': 5 }];
d3.select('body').append('svg').selectAll('circle')
    .data(data)
    .enter().append('circle')
    .attr('cx', function (d) {
        return d.x;
    });
    .attr('cy', function (d) {
        return d.y;
    });
    .attr('r', function (d) {
        return d.r;
    });

最佳答案

更新(2016 年 7 月 8 日)此答案适用于 d3 v3.x — 不适用于 v4.x。对于后一个版本,请参阅 Tim Hayes's answer , 也在这个页面上。或者...在我下面的回答中将 attrattrs 交换,并且不要忘记 require/import/script-embed d3-selection-multi。并且...不要错过有关使用 .each 的细节,这可能对您有用。


是的,可以通过传入一个哈希值(就像 jQuery 的 css() 方法):

d3.select('body').append('svg').selectAll('circle')
  .data(data)
.enter().append('circle')
  .attr({
    cx: function (d) { return d.x; },
    cy: function (d) { return d.y; },
    r:  function (d) { return d.r; }
  });

这也适用于 style()

如果重复出现的 function (d) {} 开始感觉太多了,这是另一种方法:

d3.select('body').append('svg').selectAll('circle')
  .data(data)
  .enter().append('circle')
  .each(function (d) {
    d3.select(this).attr({
      cx: d.x,
      cy: d.y,
      r:  d.r
    });
  })

注意:此功能仅存在于 d3.js v2.10.0 或更高版本中

关于javascript - 如何用一个值函数设置多个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20822466/

相关文章:

javascript - Strophe字符编码问题

javascript - 如何从页面中删除每个监听器?

javascript - 用指向其内容 jquery 的链接替换 ​​<img> 标签

javascript - 如何在 D3.js/C3.js 中格式化数字

javascript - 需要连接d3中不同圆形打包布局的两个节点以及打包布局折叠/展开

php - HTML Purifier 有选择地吃掉特殊字符

javascript - d3.behaviour.zoom 禁用仅使用一根手指时在触摸屏上的平移

javascript - 如何仅获取 JavaScript 文件的一部分?

c# - 适当使用自定义属性?

attributes - XSD中同一元素的内容限制和属性验证