RJS Template とか使ったら、すっかり忘れていた。script/console で遊んでるだけじゃダメだ。 とはいえ、さすがにちょっと触ってると思い出してきた。 やっぱり Rails は楽しいなぁ。
隣り合う(とも限らないけど) td をひとまとめにして当たり判定を、 という……要望?
<%= javascript_tag %Q{
var classNameRegExp = new RegExp('^(?:foo|bar|baz)-[0-9]+$');
var setClassNames = function(elem, className){
if(elem && elem.cachedSiblings){
elem.cachedSiblings.each(function(e){e.className = className});
}
}
$$('td').each(function(td){
var className = td.className;
if(className && className.match(classNameRegExp)){
td.cachedSiblings = $$('td.' + className);
td.onmouseover = function(){setClassNames(td, 'hovering')};
td.onmouseout = function(){setClassNames(td, 'gone')};
td.onclick = function(){
#{remote_function(:url => {:controller => "hoge", :action => "fuga"},
:with => "'id='+className")}
}
}
})
} -%>
foo-1 とか bar-1 とかいう class が付いた td のクラス名をまとめて変えられる。 で、remote_function に渡す action とかを変える方法が分からないので、id で foo-1 とかを渡して、 アクションメソッド側で redirect_to とか。何だかな。