2016-04-08 18 views
1

選択項目から項目を除外する最も簡単な方法はどれですか(2つか2つか1つ)。選択項目から要素を除外します

たとえば、次のコード(JSFiddle snippet)では、3番目以外のすべての四角形の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 .:命令が実行されていないためforEach関数にエラーが含まれていますが、間違いを見つけることができません。

+0

ViZekeはあなたに彼はD3でeach'(とforEach' 'からの差)'の大きな利点は、それが 'D '、' i'と 'this'を使用することであることが示された正しい答えを、与えました。それはあなたがそれを必要としないと言われています。単純に 'rects.attr(" y "、20)と書くことができます。 –

答えて

3

はデd3のフレームワークのためには、selection.filter(セレクタ)を使用することができます。 filter関数を使用して、フィルタリングする要素にfalseを返す関数を提供します。ドキュメンテーション:https://github.com/mbostock/d3/wiki/Selections#filter

また、「PS」の場合、d3にはforEachはありません。それぞれ機能を使用する必要があります。

以下のコードが有効です。

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

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

forEachの内部では、インデックスである 'i'にアクセスできます。 3番目の項目はインデックスが2(0ベースなので)のため、if文を追加するだけです。

rects.forEach(function(rect, i){ 
    if (i !== 2) { 
     d3.select(rect).attr('y', 20); 
    } 
}); 
関連する問題