我将用户选择的范围存储在变量中。
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。因此,我选择了我的节点,即nodeName“ B”。代表大胆。
如果我执行element.nodeName,我的输出将是“ B”。
如果我输出我的元素,我会<b> Phasellus egestas</b>
得到一个选定的范围,并且选择了“ asellus eges”
我想删除<b>
标签。并将标签添加到选择范围。如果我使用元素的innerHTML并将其替换,那么我会被选择范围弄得一团糟。
我已经看到人们建议做一个寻找父节点,而不是选择childNode并删除并做类似的事情:
element[index].parentNode.removeChild(element[index]);
但这会导致问题,如果我的父母有两个具有相同nodeName的子节点。
我已经有了选择特定Node的元素,如何保留innerConnet和HTML标记,但删除b标签?
在文本框中输入tagName,然后单击代码段中的UNWRAP按钮。所有详细信息都在摘录中进行了注释。
SNIPPET
function unWrap(wrap) {
if (!wrap) {
console.log('Enter a valid selector without quotes');
}
// Reference the node to unwrap
var removeThis = document.querySelector(wrap);
if (removeThis == "undefined" || removeThis == false) {
console.log('Selector doesn\'t exist in DOM.');
}
// Reference the wrapper's parent
var parent = removeThis.parentNode;
// Move all of wrapper's descendants...
while (removeThis.firstChild) {
/* ...by taking the wrapper's first child...
|| ...and placing it in front of the wrapper.
|| ...Eventually, all of wrapper's children...
|| ...are it's siblings now.
*/
parent.insertBefore(removeThis.firstChild, removeThis);
}
// Once the wrapper is empty, remove it
parent.removeChild(removeThis);
}
body {
color: white;
}
header,
footer {
background: cyan;
color: black;
}
table {
border: 3px solid gold;
width: 300px;
}
td {
border: 1px solid tomato;
}
section {
border: 8px dashed blue;
}
main {
background: #444;
}
b {
background: yellow;
color: #444;
}
input {
float: right;
width: 12ch;
}
.as-console {
color: blue;
}
<main>
MAIN
<section>
SECTION
<header>HEADER</header>
<p>TEXT TEXT <b>TEXT</b> TEXT TEXT</p>
<p>TEXT TEXT <b>TEXT</b> TEXT TEXT</p>
<p>TEXT TEXT <b>TEXT</b> TEXT TEXT</p>
<p>TEXT TEXT <b>TEXT</b> TEXT TEXT</p>
<p>TEXT TEXT <b>TEXT</b> TEXT TEXT</p>
<table>
<form id='f1' name='f1'>
<input type='button' value='UNWRAP' onclick='unWrap(document.forms[0].txt.value)'>
<input name='txt'>
</form>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
<footer>FOOTER</footer>
</section>
</main>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句