innerHTML は文法にうるさい。

JavaScript Template(JST) を使って、HTML中に直接テンプレートを記述する方法
は問題がありました。


記述したテンプレートを innerHTML として取得すると、
ブラウザがそれぞれ勝手な解釈をして「正しい」html に書き直そうとします。
結果、少なくとも以下の問題が発生します。

  • 不等号が htmlentities に変換される
{if hoge>2}${hoge}{/if}

みたいな非常によくある if 文が、

{if hoge < 2}${hoge}{/if}

↑こうなって parse error。
ただ、これくらいならソース弄って 置換してやれば問題ないです。

  • table のloop とか、実質無理。
<table>
{for val in data}
  <tr><td>{val.title}</td><td>{val.value}</td></tr>
{/for}
</table>

↑こんなことしてテーブル出力したいじゃないですか。
でも、IE 様の innerHTML は </tr>と<tr>間の記述を無視してくれます。
そんな IE 様でも動かすにはこんな感じ

<table>
<!--{for val in data}-->
{for val in data}
  <tr><td>{val.title}</td><td>{val.value}</td></tr>
{/for}
<!--{/for}-->
</table>

IE様 では innerHTML でも comment は 無視されない。
firefox では、innerHTML では comment は無視される。


こういうの、hack っていうの?
やってられるかっつうの。
ie、バーカ。バーカバーカ。


で、結局推奨通り 見えない textarea に入れて、value を取得することになるわけですが、
それじゃ意味ねえのよ。


デザイナさんと共同作業したいから、本来あるべきところにあってほしいわけで。
textarea に入れるくらいなら、その意味では、使わない方がマシ。

javascript でチマチマ html 組み立てる手間は省けるけどさー。


サーバサイド javascript って、そういえば昔あったなー。
それで何とかなるのかな。とも思ったけど、もう心が折れました。