【发布时间】:2017-06-14 11:49:45
【问题描述】:
我将用户选择的范围存储在一个变量中。
var sel, range, off, tags;
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
var off = sel.anchorOffset;
}
else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
var off = document.selection.anchorOffset;
}
return range;
html
<div ng-mouseup="mouseUpEvent(e)" ng-keyup="keyUpEvent()" contenteditable data-element="textBlock" id="markdown-body">
Chicken ipsum dolor sit amet, consectetur adipiscing elivolutpat volutpat. Nunc imperdiet urna et orci mattis,
pellentesque posuere enim pellentesque. Aenean id orci et nunc venenatis vestibulum et et ligula. Morbi mollis ornare purus
non blandit.<b> Phasellus egestas</b>, ipsum <i>sit amet finibus </i>pellentesque, <span style="color: red;">tellus urna
lobortis tellus, id tincidunt </span>Piza house byys nget lectus. Proin pulvinar enim non mi vestibulum interdum.
Sed nisl enim, sagittis non vestibulum eget, congue pellentesque ipsum. Nullam nec interdum elit
</div>
我已经找到了我的 anchorNode 和我的 focusNode。 所以我选择了节点名称“B”的节点。代表粗体。
如果我使用 element.nodeName,我的输出将是“B”。
如果我输出我的元素,我会得到<b> Phasellus egestas</b>
我也有一个选定的范围,我选择了“asellus eges”
我想删除<b> 标签。并将标签添加到选择范围。
如果我取元素的 innerHTML 并替换它,那么我会被选择范围弄乱。
我看到人们建议寻找父节点,而不是选择 childNode 并删除并执行以下操作:
element[index].parentNode.removeChild(element[index]);
但如果我的 Parent 有两个具有相同 nodeName 的子节点,这将导致问题。
我已经有了选择特定 Node 的元素,如何保留 innerConnet 和 HTML 标记但删除 b 标记?
【问题讨论】:
-
你想用
Phasellus egestas替换例如<b> Phasellus egestas</b>? -
是的替换也是一种选择,它会给出相同的结果。如何替换和更新 DOM?
-
谢谢 ibrahim Mahrir,重新提出问题让我找到了答案。我将 innerHTML 克隆到一个属性,而不是使用 replaceWith(cloneInnerHTML) 并且能够替换标签名称的宽度
-
用 innerHTML 替换节点会弄乱我的 getSelection 。有没有办法只删除节点?
标签: javascript nodes child-nodes