アコーディオンメニューで質問された

ちょっとwebチームの人に訊かれたので、調べてみた。

恐らくここ↓で紹介されてるスクリプトだと思う。
スムーズに開閉するJavascriptアコーディオンメニュー | CREAMU
配布元
Animated JavaScript Accordion V2 - Web Development Blog

指定の仕方はこんなふう。

var mySlider=new accordion.slider('mySlider');
mySlider.init('slider',0,'open');

これで「slider」というidのdlを開閉する。
第二引数のゼロはロード時に開いた状態にするddの番号(配列だからゼロ始まりね)。
第三引数が開いた状態の時に付与するクラス名。

デモとして付属していたHTMLには以下のようなコードがある。

var slider1=new accordion.slider("slider1");
slider1.init("slider");

var slider2=new accordion.slider("slider2");
slider2.init("slider2",0,"open");

第二、第三引数はオプションなので、指定しないでもいいというのは判る。
sliderに対しては第二引数を指定していないので、初期状態では全て閉じていることになる。
slider2はゼロが指定されているので、一番上のメニューだけが開いている状態であり、その開いているメニューに対して第三引数のopenというクラス名を設定している(classNameに直接入れているので、追加ではない)。

じゃ、上記のslider1のように全て閉じていたいけど、開いたときにはクラス名を与えたいってのは、どうしたらいいの?ってのが、訊かれた内容。


でもって、このスクリプトがなにをやってるかというと、ロード時には第一引数のidのdlのdtとdd全てに対してチェックして、第二引数で指定されている番号(添え字)の要素以外をdisplay:noneして、第二引数と一致するものには第三引数の文字列をクラス名として与えるだけ。
第二引数(c)とループカウンタ(i)の比較も

if(c!=i){

とかなので、どうしようかと。*1


結局

var slider2=new accordion.slider("slider2");
slider2.init("slider2",-1,"open");

とかありえない数字で乗り切ったけど、「null」とかでも良かったか?
この値でループするワケじゃないから、「999」とかでもいいのかも。
「""」みたいな空文字だとゼロとイコールになるんだっけ?


JavaScriptはよーわからん。

*1:そもそも数字かどうかとかのチェックもしてないってのは、プログラマ的にはどうかと思ったりするんだけど、JavaScript的にはアリなのかな?