SVGのtext要素でUnicodeのHTML文字参照を使う
意外なやり方だったのでメモしておく。
方法
次のようなsvg#screen1にHTML文字参照を含むコンテンツを持つtext要素を追加したい場合、
text要素をcreateElementNSで生成したらinnerHTMLでコンテンツをセットする。
これで"test@foo"が表示される。
見つけた経緯
レイアウトの調整のために、直接タグを書いていたときには問題なく表示できていた。
<svg width="400" height="20"> <text x="0" y="16" fill="black">test@foo</text> </svg>
動的に描画するためにtextContentやcreateTextNodeを使ったら、"&"が"&"になるので、"test@foo"と表示されてしまった。
直接タグを書いていた時にはできていたので何かあるはずと思って、text要素のインスタンスのプロパティを直接見たらinnerHTMLがあった(SVGの要素なのに)。
気になること
W3Cとかでこのあたりの資料探してみたけどいまいち見つからない...
React.jsの場合
上記のことを踏まえて、dangerouslySetInnerHTMLを使えば実現できる。
確認したブラウザとバージョン
次のブラウザで表示できるのを確認した。
ブラウザ | バージョン |
---|---|
Firefox | 47.0 |
Google Chrome | 52.0.2743.82 |
Safari | 9.1.2 |
ソースコード
こちら: SVG Text · GitHub