- 2008-10-24 (金) 1:58
- JavaScript | Programming
ここ1年ぐらいでJavascriptをかなり触るようになりました.
最初は馴染みにくかった言語仕様とかJavascriptのお作法も少しずつわかってきました.
前はprototype.jsを使ってましたが,最近はjQueryを使うことが多いです.
で,Javascriptで以下のようなコードを書くことが多いなぁと思っていました.
var id = "test"; var text = "hello world"; '<p id="' + id + '">' + text + '</p>'
大事なのは3行目.クォートで囲ったりが面倒くさい.
Rubyの”#{var}”みたいな書き方できないかなぁって思ってました.
id = "test";
text = "hello world"
'<p id="#{id}">#{text}</p>' # => <p id="test">hello world</p>
evalとか使ったらできそう・・・でも書く自信がなかったので
RailsのActiveRecordのconditionsモドキにしてみました.
String.prototype.replaceS = function(obj){
$.each(obj, function(key, value){
this.replace(":" + key, value);
});
}
これで,
'<p id=":id">:text</p>'.replaceS({id:'test', text:'hello world'}) # => <p id="test">hello world</p>
となります.
・・・長いなぁ.同じ変数を文字列中に何度も使ったりする場合は便利じゃないかなぁと思うんですけど.
あとは3項演算子使うときとか・・・.
やっぱりRubyの文字列リテラルに埋め込む方法を真似したいなぁ.
ちなみにreplaceSのSはSymbolのSなんですけど,名前が適当すぎますね.
あと,keyは長い順にソートしてから適用するとかしないと変なことになりそうですね.
もしかしてもっと簡単にやる方法があるのかな?あったら教えてほしいです!
— 追記
Rubyっぽいのを作りかけて気付きました.
String.prototype.replaceV = function(){
var str = this;
var vars = $.unique(str.match(/\{.+?\}/g));
$.each(vars, function(v){
str.replace(v, eval(v));
});
return str;
}
こんな感じでできるんじゃない?って思ったら,この関数から変数にスコープがないからダメだ.むーん.
- Newer: MacBook購入
- Older: MacBook欲しい
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://16c.jp/2008/1024015817.php/trackback
- Listed below are links to weblogs that reference
- Javascriptの文字列リテラルに変数を埋め込みたい from 16c Blog