selection.classed - クラスを確認、変更する

投稿日: / 更新日:

d3.jsのselection.classed()は、要素が指定したクラスを持っているか否かを確認したり、要素のクラスを外したり付けたりするためのAPIです。

サンプルコード

<p class="aaa bbb ccc">SYNCER</p>
// p要素を取得
var selection = d3.select( "p" ) ;

// [bbb]というクラスを持っているか確認
var hasClass = selection.classed( "bbb" ) ;

// [aaa]と[bbb]という2つのクラスを持っているか確認 (複数指定)
var hasClass = selection.classed( "aaa bbb" ) ;

// [bbb]というクラスを外す
selection.classed( "bbb", false ) ;

// [bbb]というクラスを付ける
selection.classed( "bbb", true ) ;

// [aaa]を付け、[bbb]を外す (複数指定)
selection.classed( { "aaa": true, "bbb": false } ) ;

// 関数で値を指定する (戻り値が値となる)
selection.classed( "value", function( d, i ) {
	// d=関連付けられたデータ
	// i=インデックス番号
	// this=要素

	return "設定したい値" ;
} ) ;

デモ

構文

value || selection = selection.classed( object || name [, value || function] )
引数
項目説明
name対象のクラス名を指定する。複数指定するには、半角スペース( )で区切る。順番は無視される。持っているかの確認の場合、複数指定すると、OR条件ではなく、AND条件となります。第2引数にfalseを指定して外す場合、複数指定すると、存在しないクラスは無視され、存在するクラスだけが外されます。
value省略可。trueを指定するとクラスが付与され、falseを指定すると外される。二重に付けられることはない。また、存在しないクラスを外そうとしてもエラーにならずスルーされる。
function第2引数に指定する値を、関数にすることもできる。ここで指定した関数は、第1引数に要素に関連付けられたデータ、第2引数にインデックス番号をとる。また、thisで要素を参照できる。戻り値が値として設定される。
object複数のクラスを指定して、一括でtrue、またはfalseを指定するのではなく、.aaatrue.bbbfalseというように処理を分けたい場合、第1引数にオブジェクトリテラルで値を指定します。{ "aaa": true, "bbb": false }というように値を指定しましょう。
戻り値
項目説明
value引数を1つだけ指定して、クラスを持っているか否かを確認した場合はBoolean値が返る。持っている場合はtrue、持っていない場合はfalse
selection引数を2つ指定した場合は、d3.selectionオブジェクトが戻り値となる。

ノート

1つなら確認
引数を1つ指定するとクラスを持っているか否かの確認。
2つなら変更
引数を2つ指定するとクラスの付け外し。
クラスを外すならfalse
クラスを外すならfalse、クラス属性自体を外すならattr()を利用する。
一括じゃないならオブジェクト
クラスによって付けたり、外したり、違う処理を振り分けるには、第1引数にオブジェクトリテラルで値を指定する。
複数の確認はAND条件
複数のクラスを指定して、持っているか否かを確認する場合はAND条件になり、指定した全てのクラスを持っていないとtrueにはならない。
重複の心配なし
同じクラスを何回付けても、class="aaa aaa aaa"のようにはならない。
外す時は存在なしでもいい
class="aaa bbb"に対してaaa ccc dddを外そうとすると、aaaだけが外れる。エラーは起こらない。