jQueryでpreタグ内にテキストを入れると、IEだけ改行が消える
InternetExplorerは、innertHTMLで<pre>にテキストを突っ込むと改行が消え失せる。これ絡みで、jQueryでtextareaから取得した値を加工してpreタグの中に入れようとしたのだけど、Firefoxでは正常なのにIEでは改行が無くなる……というのにものすごくハマったのでメモ。
<textarea>からの取得
jQueryには、要素からの取得・設定系メソッドにはhtml(), text(), val()の3つがある。つまり、取得に3種類、設定に3種類で、3x3=9種類の方法があるわけだ……。メンドいけど以下のようなソースで9種類試してみた。
<script type="text/javascript"> $(function() { $("input#my-submit").click(function() { var data = $("textarea#inputdata").html(); // var data = $("textarea#inputdata").text(); // var data = $("textarea#inputdata").val(); $("pre#result_html").html(data); $("pre#result_text").text(data); $("pre#result_val").val(data); }); }); </script> …… (省略) …… <p><textarea id="inputdata" name="yaml" rows="10" cols="80">1: Apple 2: Orange 3: - Banana - Grape - Strawberry </textarea></p> <p> <input type="button" id="my-submit" value="チェックする"></input> </p> <p>チェック結果</p> <pre id="result_html"></pre> <pre id="result_text"></pre> <pre id="result_val"></pre>
このうち、IEで期待通りに正常動作したのは「val()で取得、text()で設定」だけだった。
以下の図のようにhtml()で設定すると改行が消えるし、val()で設定しても何も表示されない(val()で設定というのはvalue属性に値を設定するので、preタグに使えないのは当たり前だが……)。
なお、text()とhtml()の違いについては以下の記事が分かりやすかったです。