jqueryでifとか使いTai!
$(elm) .if( (hoge==1), $(this).prop('mark',1) ) .addClass('hage') .if(($(elm).hasClass('guge'), $(this).removeClass('guge') )
こんなコードカキタイナーってつぶやいたら、udzuraさんから
http://0-9.sakura.ne.jp/pub/lt/browserws/jquery.tap.html
をおしえてもらって、
こんなコードができた
$.fn.if = function (flag, func) { if(flag && $.isFunction(func)){ func.call(this, this) } return this; }
これはこんなふうに書ける
$('body') .if(1, function(){$(this).css('background-color','red')}) .if(0, function(){$(this).css('background-color','blue')}) .if(1, function(){$(this).css('background-color','green')})
大体望み通りの事ができる!!
うーん、function(){}って毎回かかなきゃいけないのがウザいなー。
最初みたいな書き方したいなー(eval的な方法以外のやり方が思い浮かばない…)
追記
ふむ、CoffeeScriptなら、まあ見れない事もないな。
$('<span />') .prop('src_id',src.id) .if(src.pin==1, ()-> $(this).addClass('check').text('レ') ) .if(src.pin==0, ()-> $(this).addClass('nocheck').text(' ') )
うーん、
.if( src.pin==1, ()-> $(this).addClass('check').text('レ'), ()-> $(this).addClass('nocheck').text(' ') )
ってelseまでかけるのがいいかなあ?
でも一行長くなるし(上は改行してあるけど)、じゃあelseif実装するの?って感じになるし、まあif羅列でいいかなあ。
追記
追記する事でもないけど、Gist
追記
iPhone の Mobile Safariだとエラー扱いになっちゃいますね(Webkitだと普通に動くんだけどな)
ついでに、結局else動作をサポートしたものが以下になります。
$.fn.ift = function(){ var flag = arguments[0]; var func = arguments[1]; var else_func = arguments[2]; if(flag && $.isFunction(func)){ func.call(this, this); }else if(!flag && $.isFunction(else_func)){ else_func.call(this, this); } return this; }