javascript - 从选择中排除元素

标签 javascript d3.js foreach selection

从选择中排除一项(或两项或几项)的最直接方法是什么?

例如,在下面的代码 ( JSFiddle snippet ) 中,我想更改除第三个以外的所有方 block 的 y 位置。我该怎么办?

var svg = d3.select("body")
  .append("svg")
  .attr("width", 320)
  .attr("height", 300);

for (var i=0;i<10;i++) {
svg.append("rect")
  .attr({
    x: 32*i,
    y: 0,
    height: 30,
    width: 30,
    fill: "green"
  })
} 

var rects=d3.selectAll("rect"); // this line has to be changed/completed to exclude the third rect

rects.forEach(function(rect, i){
    d3.select(rect).attr("y", 20)
})

P.S.: forEach 函数包含一个错误,因为指令没有被执行,但我找不到我的错误。

最佳答案

对于 de d3 框架,您可以使用 selection.filter(selector)。使用 filter 函数,您可以提供一个函数,该函数会为要过滤的元素返回 false。文档:https://github.com/mbostock/d3/wiki/Selections#filter

对于'PS',d3 上没有forEach,您必须使用each 函数。

下面的代码应该可以工作。

var rects = d3.selectAll("rect").filter(function(d, i) { return i != 2; });

rects.each(function(d, i){
        d3.select(this).attr("y", 20);
})

关于javascript - 从选择中排除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507997/

相关文章:

javascript - D3.js - exit() 部分不会删除所有数据

d3.js - 为什么我的 geo LineString 不遵循纬度/经纬网曲线?

d3.js - 在 D3.js v4 中使用轴过渡包裹长标签

c# - 不同属性的通用 foreach 循环

php - 只执行一次 foreach 循环

javascript - 使用 jQuery 获取 ListBox 中选定项目的数量

Javascript - 更新对象属性的函数

javascript - 切换回来并强制多个 css 元素的优雅方式

javascript - 如何在 JavaScript 中获取回调错误以提醒?

java - 为什么 Java 不能为每个循环解析 this 中的变量?