種別[statuses] aboutme:138309
セクションJRF のひとこと
日時2011年04月12日
元URLhttp://jrf.cocolog-nifty.com/statuses/2011/04/aboutme138309.html

Javascript のソース内で XML…

Javascript のソース内で XML タグを直に記述している例があってそれをマネていたのだが、それが E4X という名の機能であることをやっと知った。…が、すごい使いにくい。配列 Array を含むようなのはどうやって記述すればいいんだ?
JRF 2011年4月12日

<tag>text</tag> と書くのが普通だが、<tag>{varname}</tag>とすると varname の内容が tag に挟まれる。このとき、varname が < や > を含んでいると自動的にエスケープされてしまうため、この記述のままだと、tag の中に変数に入った xml 文書を書き込むということができない。(やる方法を私は見つけられなかった。)

JRF 2011年4月12日

{} のテクニックは、タグにも属性にも使え <{tag} {attr}={value}>{cont}</{tag}> みたいな使い方もできるそうだが、<div class="a-{id}">...</div> みたいに属性値の一部に含ませるような器用なことはできない。

JRF 2011年4月12日

で、どうしたかというと、xml を文字列に直したあと、class 属性の中の {id} は、form で使っていたので {id} と書かれる部分がほかにないから、{id} と書いている部分を replace した。また、タグ内で、Array を書きたちときは、一端 <place>place</place> などと書いておいて、< > は変数から書き換わったやつには含まれないはずなので、それを replace した。

JRF 2011年4月12日

例えば…、

var xml =
<array class="a-{id}">
<value><place>place</place></value>
</array>;

var r = xml.toString().replace(/\{id\}/g, id).replace(/\s*<place>place<\/place>\s*/, arraystr);

…などとする。<place> を置きかえるときに \s で空白も取っておかないと、余計な空白が入って困ることがあった。

JRF 2011年4月12日