contenteditabledivにタグを挿入するロジックがあります。挿入後、次の要素の先頭にカーソルを合わせたい。私がこれをしなければならないコードは次のとおりです:
function insertNodeAtCaret(node) {
if(typeof window.getSelection !== 'undefined')
{
var sel = window.getSelection();
if(sel.rangeCount)
{
var rng = sel.getRangeAt(0);
rng.collapse(false);
rng.insertNode(node);
// The following doesn't work in Chrome or Safari
node = node.nextSibling;
rng.setEndAfter(node);
rng.setStartAfter(node);
rng.collapse(true);
sel.removeAllRanges();
sel.addRange(rng);
}
}
else if (typeof document.selection !== 'undefined' && document.selection.type !== 'Control')
{
document.selection.createRange().pasteHTML(node.outerHTML);
}
}
ただし、これはIE、Opera、Firefoxでは完全に機能しますが、ChromeとSafariでは機能しません。Chrome / Safariでは、カーソルはスパンの後ではなく、スパン内のテキストの最後に置かれます。すなわち
<span>text CURSOR HERE</span>
私が望んでいるものの代わりに、それは:
<span>text</span>CURSOR HERE
ありがとう。