2008年1月24日木曜日

javascript - createTextNodeで文字参照を使う

javascriptのDOM操作でHTMLの編集をする際
テキストを入れたい時

node.innerHTML = string;

で追加するのもいいが、色々と問題が出てきたから

document.createTextNode(string)

でテキストノードを追加したいってことがあるかもしれない。
ここで文字列stringで&や亙などの文字実体参照 (Character entity reference)や数値文字参照 (Numeric character reference)を使いたいってことがあります。たまに。
しかし、普通に

var string = "&";
var txtnode = document.createTextNode(string);

とやって出力しても

& (ソースでは:&)

と出てきて、本来欲しかった

& (ソースでは:&)

が出てくれません。自動的にエスケープされてしまいます。
これはこれで便利なんですがこれでは文字参照が使えません。
で、色々やってみたのですが
prototype.jsのunescapeHTML()を使えば多分いけます。
つまり

var string = "&";
var txtnode = document.createTextNode(string.unescapeHTML());

とやれば

&

が出てきました。出てくるはず。
後でprototype.jsのunescapeHTML辺りを確認しておこう。
こんなんでいいのかよく分からないなぁ。

・・・本来ならcreateEntityReferenceとかString.fromCharCodeで生成する気がしますが。
文字参照を含む文字列を一度に入れたいときには便利だと思います。


適当に追記
prototype.jsのunescapeHTMLって中でinnerHTML使ってたんですね。
うーん。素直にinnerHTMLで書いたほうがいいかも。

0 件のコメント: