如何删除 contenteditable 中元素的尾随空格?
How to remove trailing whitespace of an element in contenteditable?
我已经尝试了一段时间了,请在下面找到我的工作。
/**
* @param {any} container contenteditable container
* @param {any} node element contained inside the container for which we need to
* remove the space from
*/
function removeTrailingSpace(container,node){
if (typeof window.getSelection != "undefined") {
var sel = window.getSelection(), range;
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0).cloneRange();
range.collapse(true);
range.setStartAfter(node);
range.setEnd(container, 1);
var rString = range.toString();
var sChar = range.toString().length > 0 ? rString[0] : null;
if (sChar && sChar.trim() === '') {
console.log("TRAILING SPACE FOUND");
range.setEnd(range.startContainer, range.startOffset + 1);
range.deleteContents();
}
}
}
}
更具体地说,我需要从 contenteditable div.
中删除按钮元素后的“ ”
如有任何建议,我们将不胜感激。
谢谢
我找到了解决您问题的方法,您要删除的空白实际上是一个文本节点。请尝试以下代码:
function removeTrailingSpace(container, node) {
const values = Array.from(container.childNodes.values());
const value = values.find(x => x === node);
const index = values.indexOf(value);
const nextNode = container.childNodes[index + 1];
if(nextNode.nodeValue.length === 1 && nextNode.nodeValue.charCodeAt(0) === 160) {
console.log('Whitespace found, removing...');
container.removeChild(nextNode);
}
}
我已经尝试了一段时间了,请在下面找到我的工作。
/**
* @param {any} container contenteditable container
* @param {any} node element contained inside the container for which we need to
* remove the space from
*/
function removeTrailingSpace(container,node){
if (typeof window.getSelection != "undefined") {
var sel = window.getSelection(), range;
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0).cloneRange();
range.collapse(true);
range.setStartAfter(node);
range.setEnd(container, 1);
var rString = range.toString();
var sChar = range.toString().length > 0 ? rString[0] : null;
if (sChar && sChar.trim() === '') {
console.log("TRAILING SPACE FOUND");
range.setEnd(range.startContainer, range.startOffset + 1);
range.deleteContents();
}
}
}
}
更具体地说,我需要从 contenteditable div.
中删除按钮元素后的“ ”如有任何建议,我们将不胜感激。 谢谢
我找到了解决您问题的方法,您要删除的空白实际上是一个文本节点。请尝试以下代码:
function removeTrailingSpace(container, node) {
const values = Array.from(container.childNodes.values());
const value = values.find(x => x === node);
const index = values.indexOf(value);
const nextNode = container.childNodes[index + 1];
if(nextNode.nodeValue.length === 1 && nextNode.nodeValue.charCodeAt(0) === 160) {
console.log('Whitespace found, removing...');
container.removeChild(nextNode);
}
}