这就是我用元素包装所选文本的方法:
let selectObj = window.getSelection();
let wraptag = document.createElement("a");
const range = selectObj.getRangeAt(0).cloneRange();
range.surroundContents(wraptag);
selectObj.removeAllRanges();
selectObj.addRange(range);
但是,如果选择跨越文本节点边界,它将无法正常工作,所以我认为我可以对每个交叉的节点进行换行,这样就不会失败(选择的文本位于a标签内)
<div>
Lorem
<b>ipsum
<a>dolor</b> sit</a>
amet
</div>
它会创建两个这样的环绕:
<div>
Lorem
<b>ipsum <a>dolor</a></b>
<a>sit</a>
amet
</div>
你知道我怎么能做到吗?