preタグの内容をjQueryの.text()で取得するとIEでは改行が消える?
ドットインストールに「ソースコードをコピーしやすくする機能」をつけました。
» ドットインストールでソースコードのコピーがしやすくなりました #dotinstall | IDEA*IDEA
これに絡んで、 jQueryを使って pre タグに表示している内容をそのまま textarea に入れるということをしようとしたら、IEだけ挙動が違ったという話です。
サンプルは以下。「Copy by text」ボタンを押すと jQuery の .text() で pre タグの内容を取得、「Copy by html」ボタンを押すと .html() で取得して、その内容を textarea に .val() でセットするというものです。
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>jQuery from pre to textarea</title> <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> </head> <body> <pre id="from"> <span>1行目</span> 2行目 3行目 </pre> <textarea id="to" cols="30" rows="5"></textarea> <br> <input type="button" id="copy_t" value="Copy by text"> <input type="button" id="copy_h" value="Copy by html"> <script> $('#copy_t').click(function() { var t = $('#from').text(); $('#to').val(t); }); $('#copy_h').click(function() { var h = $('#from').html(); $('#to').val(h); }); </script> </body> </html>
これを IE で実行すると、 .text() を使った場合に改行が消えます。 .html() を使う場合は改行は消えませんが、 pre タグ内にタグを実体参照で記述していると、textareaには「<span>」のような状態でセットされてしまいます。
ChromeやFirefoxなら .text() で改行もそのまま取得できるんですが、IEだけはうまくいきませんでした。
というわけで最終的には「pre タグを非表示にし、あらかじめ非表示にしておいた textarea を表示して .select() を実行することで全選択状態にする」という方法に変えたのですが、なんともモヤモヤっとするIEです。
コメントを残す