script.aculo.usのBuilder
element = Builder.node( 'div',{id:'ghosttrain'}, [ Builder.node('div',{className:'controls',style:'font-size:11px'}, [ Builder.node('h1','Ghost Train'), "testtext", 2, 3, 4, Builder.node('ul',[ Builder.node('li',{className:'active', onclick:'test()'}, 'Record') ]), ]), ]);
tdタグのcolSpanとかどういう風に指定すればいいのかよく分からなかったです。
http://d.hatena.ne.jp/akm/20051023 に書いたコードでは、ネストしたノードは、特別な属性"body"に文字列かオブジェクトか、それらの配列を指定することができます。この辺どっちがいいかは使い方にもよるでしょう。
試しに同じ内容のものを書いてみた。
var builder = new JsonDomBuilder("body", document); var element = builder.execute( { tagName: 'div', id: 'ghosttrain', body: { tagName: "div", className:'controls', style:'font-size:11px', body: [ { tagName: "h1", body: 'Ghost Train' }, "testtext", "2", "3", "4", {tagName: "ul", body: {tagName: 'li',className:'active', onclick:'test()', body:'Record' } } ] } } );
やっぱりtagNameとbodyがちょっと鬱陶しい。tとかbとかに略しちまおうかとも思ったけど、何か気持ち悪いので意味がわかるようにこうしておいた。
それと2,3,4は文字列でないと今のところまずい。StringだけでなくNumber、Dateもノードを表すオブジェクトとして認めるのが普通な気がしてきた。Booleanもそうしたいところだけど、一般的にBooleanの値ってTrueとかFalseで表現しても嬉しくないよね。やっぱcheckboxみたいになってないと、お客さんにちらっと見せることができない。disabledのinput type="checkbox"として見せるか。うーん、checkboxにもreadonlyが効いてくれればいいのに。
ちなみにtagNameという記述は変えられないけど、bodyの方はJsonDomBuilderのコンストラクタの第1引数で変更可能。引数は両方とも指定しなくてもOK。