あなたはフィルタを使用し、選択した要素のサブセットに選択を減らしたい場合。子孫要素を選択する場合は、またはselectAllを選択します。
多くの場合、フィルタはデータまたはインデックスに基づいて要素をフィルタするために使用されます。ただし、フィルタ機能内で選択された要素にthis
という名前でアクセスできます。あなたが選択したいくつかの要素を持っている、とあなたは1の不透明度を持つ要素のみにその選択を減らしたい場合はこのように、あなたが言うことができます。
var opaque = selection.filter(function() {
return this.style.opacity == 1;
});
を安全にするために、あなたはむしろcomputed styleを見てすることを好むかもしれません要素のスタイルプロパティよりもこのようにして、不透明度がスタイルシートから継承される場合、正しい値が得られます。それ以外の場合、スタイルが継承されるときthis.style.opacity
は空の文字列になります。
var opaque = selection.filter(function() {
return window.getComputedStyle(this, null).getPropertyValue("opacity") == 1;
});
または同等に、ノードを選択し、selection.styleを使用します。
var opaque = selection.filter(function() {
return d3.select(this).style("opacity") == 1;
});
あなたはそれが簡単にあなたがデータによって、またはクラスによって、代わりに計算されたスタイルプロパティによってフィルタする場合かもしれません。たとえば、ノードにクラスを設定した場合、クラスで選択範囲をフィルタリングすることができます。
var opaque = selection.filter(".opaque");
これはフィルタには完全な意味を持ちます(最後のコードスニペットは、 )。しかし、関数の引数を持つselectとselectAllについてはあまり明確ではありません。子孫要素を選択するために関数をどのように使用できますか?再度、感謝します。 –
「.foo」などのセレクタ文字列を使用しない場合は、selectまたはselectAllを関数と一緒に使用します。たとえば、選択したすべてのノードの最初の子を選択するには、 'selection.select(function(){return this.firstChild;})'と言うことができます。 – mbostock