[英]Is it possible to prevent child elements from being deleted when their parent is contentEditable?
[英]Contenteditable: prevent inner element from being deleted
我有一个简单的 contenteditable 标记:
<div class="example" contenteditable="true">
<div class="inside">Some content</div>
</div>
当我删除“ Some content
”时, class="inside"
div 也会被删除。 有没有办法防止删除内容时删除内部div?
例如,这是我在删除内容后尝试制作的外观。
<div class="example" contenteditable="true">
<div class="inside"></div> <!-- The div is not deleted -->
</div>
我环顾四周,但似乎没有明确的答案。
任何帮助将不胜感激。
谢谢。
这可能会帮助某人
function onpaste(e: ClipboardEvent) {
e.preventDefault();
const selection = window.getSelection();
// Don't allow deleting nodes
if (selection.anchorNode.isSameNode(selection.focusNode)) {
// get text representation of clipboard
const text = e.clipboardData.getData("text/plain");
// insert text manually, but without new line characters as can't support <br/>s yet
document.execCommand("insertHTML", false, text.replace(/\n/g, ""));
}
}
function onkeydownInEditable(e: KeyboardEvent) {
if (e.key === "Enter") {
e.preventDefault();
}
if (e.key === "Backspace" || e.key === "Delete" || e.key === "Paste") {
const selection = window.getSelection();
// Don't allow deleting nodes
if (!selection.anchorNode.isSameNode(selection.focusNode))
e.preventDefault();
}
}
elementEditing.addEventListener("keydown", onkeydownInEditable);
elementEditing.addEventListener("paste", onpaste);
const example = document.querySelector(".example")
example.addEventListener("keydown", (e) => {
if (e.keyCode == 8 || e.keyCode == 46) { // delete and del keys
if (example.children.length === 1) { // last inner element
if (example.children[0].innerText < 1) { // last element is empty
e.preventDefault()
}
}
})
.inside, .example { display: inline; }
<div class="example" contenteditable="true"> <div class="inside">Some content</div> </div>
也许有一种样式是内联级元素。
由于删除内容时宽度将为 0%。 您不能再次单击它或添加任何内容。
所以,我的解决方案将是
.inside, .example {
display: block;
}
如果需要,您可以指定宽度。 :)
.inside, .example { display: block; }
<div class="example" contenteditable="true"> <div class="inside">Some content</div> </div>
您必须将contenteditable="true"
添加到内部元素:
<div class="example">
<div class="inside" contenteditable="true">Some content</div>
<div class="inside">Some content</div> <!-- This one will not be deleted -->
<div class="inside" contenteditable="true">Some content</div>
</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.