Chrome で編集可能な body 要素に 2 つの連続したスパンを挿入しようとしています。私の問題は、2 番目のスパンが最初のスパンの隣ではなく、最初のスパンの内側になってしまうことです。
例を単純化しましたが、実際には、エンド ユーザーはカーソルを移動したり、2 つの挿入の間にテキストを選択したりした可能性があります。
<html>
<head>
<script>
function load(){
insert("<span style='color:red'>hello</span>");
insert("<span>goodbye</span>");
}
function insert(sHtml){
var oSel = window.getSelection();
var oRange = oSel.rangeCount > 0 ? oSel.getRangeAt(0) : void 0;
if(!oRange){
oRange = window.document.createRange();
oRange.selectNodeContents(window.document.body);
}
var newFrag = oRange.createContextualFragment(sHtml);
oRange.insertNode(newFrag);
oRange.collapse(false);
oSel.removeAllRanges()
oSel.addRange(oRange);
}
</script>
</head>
<body onload="load()">
</body>
</html>