【发布时间】:2021-10-25 06:08:56
【问题描述】:
我有一个内容可编辑字段,我可以在其中输入和 html 格式的 som 文本(选择文本并单击一个按钮以在其周围添加 <span class="word"></span>)。
我使用以下函数:
function highlightSelection() {
if (window.getSelection) {
let sel = window.getSelection();
if (sel.rangeCount > 0) {
if(sel.anchorNode.parentElement.classList.value) {
let range = sel.getRangeAt(0).cloneRange();
let newParent = document.createElement('span');
newParent.classList.add("word");
range.surroundContents(newParent);
sel.removeAllRanges();
sel.addRange(range);
} else {
console.log("Already in span!");
// end span - start new.
}
}
}
}
但在我有的情况下:
Hello my
<span class="word">name is</span>
Benny
并且我选择“is”并单击我的按钮,我需要防止 html 嵌套,所以不是
Hello my
<span class="word">name <span class="word">is</span></span> Benny
我需要:
Hello my
<span class="word">name</span>
<span class="word">is</span>
Benny
我尝试检查父类,看看它是否已设置,但是如何防止嵌套 html - 在插入符号开始位置关闭跨度标记,添加并在插入符号位置末尾添加,这样 html 就不会嵌套?
还要考虑span中是否有选择后的元素:
所以:
Hello my
<span class="word">name is Benny</span>
再次选择 IS 并单击我的按钮:
Hello my
<span class="word">name</span>
<span class="word">is</span>
<span class="word">Benny</span>
感谢任何帮助!
提前致谢。
【问题讨论】:
-
我已经这样做了 - 但我没有找到有效的帮助或答案
-
但是如果你点击edit然后
[<>],你可以创建一个minimal reproducible example所以我们不必这样做 -
let text = sel.getRangeAt(0).cloneRange().text?