Home > JavaScript | Programming > Javascriptの文字列リテラルに変数を埋め込みたい

Javascriptの文字列リテラルに変数を埋め込みたい

ここ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;
}

こんな感じでできるんじゃない?って思ったら,この関数から変数にスコープがないからダメだ.むーん.

Comments:0

Comment Form
Remember personal info

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

Home > JavaScript | Programming > Javascriptの文字列リテラルに変数を埋め込みたい

Search
Feeds
Meta

Return to page top