![](/img/trans.png)
[英]Html: Contenteditable how to detect before deleting element after pressing backspace?
[英]Contenteditable: How to completely remove span when pressing del or backspace
我有一个contenteditable div,如下面的HTML所示(插入标记为|
)。
我想在按退格键或删除时删除span.label
(即span作为单个字母,因此对于用户来说,看起来好像在一个单键中删除了Name
)
<div contenteditable="true">
Hallo, <span class="label">Name</span>|,
this is a demonstration of placeholders!
Sincerly, your
<span class="label">Author</span>
</div>
您需要检查光标是否位于跨度结束的确切位置,如果是,请将其删除:
document.querySelector('div').addEventListener('keydown', function(event) { // Check for a backspace if (event.which == 8) { s = window.getSelection(); r = s.getRangeAt(0) el = r.startContainer.parentElement // Check if the current element is the .label if (el.classList.contains('label')) { // Check if we are exactly at the end of the .label element if (r.startOffset == r.endOffset && r.endOffset == el.textContent.length) { // prevent the default delete behavior event.preventDefault(); if (el.classList.contains('highlight')) { // remove the element el.remove(); } else { el.classList.add('highlight'); } return; } } } event.target.querySelectorAll('span.label.highlight').forEach(function(el) { el.classList.remove('highlight');}) });
span.label.highlight { background: #E1ECF4; border: 1px dotted #39739d; }
<div contenteditable="true"> Hallo, <span class="label">Name</span>|, this is a demonstration of placeholders! </div>
我没有实现
del
键功能,但总体思路就在那里,我认为你可以根据上面的例子来完成它
你可以在div上听取onKeyDown事件:
<div contenteditable="true" id="editable">
Hallo, <span class="label">Name</span>|,
this is a demonstration of placeholders!
</div>
这是事件监听处理程序:
document.addEventListener('keydown', function (e) {
var keycode = event.keyCode;
console.log(keycode);
if (keycode === 8 || keycode === 46) {
var spnLables = document.querySelectorAll('#editable span.label');
if (spnLables.length) {
Array.prototype.forEach.call(spnLables, function (thisnode) {
document.getElementById('editable').removeChild(thisnode);
});
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.