contenteditable=onのキャレット位置に改行を挿入するjavascript
XML文書の改行コードは0x0A(\r)とすることが勧められている って知らんかったー!
ということで、キャレット位置に<BR>と\rを挿入し、
<BR>と\rの間にキャレット位置を移動するスクリプトを書いてみました。
jquery拡張です。
$.fn.extend({
insertBR: function() {
if (jQuery.browser.msie) {
sel = document.selection;
range = sel.createRange();
range.pasteHTML("<br>");
range.select();
} else {
sel = window.getSelection();
range = sel.getRangeAt(0);
text = document.createTextNode("\r");
range.insertNode(text);
node = $("<br>").get(0);
range.insertNode(node);
range.setStartAfter(node);
range.setEndAfter(node);
sel.removeAllRanges();
sel.addRange(range);
}
return false;
}
});
\rじゃなくて\nだと動作しないよ
\r以外のコントロールコードだと、safariでおかしくなるよ
ほかのやり方もあるけど全部イマイチ
Shift+Enterイベントを発生させる→firefox、chromeのみonkeypressイベント発生
document.execcommandのinsertLineBreak→safariのみ有効
document.execcommandのinsertHTMLでBR挿入→Mozzilaで有効だが、弟ノードが存在しないと挙動がおかしい