gpt4 book ai didi

javascript - Contenteditable 在 Firefox 上删除尾随空格,但在 Chrome 上没有

转载 作者:行者123 更新时间:2023-12-04 17:11:44 25 4
gpt4 key购买 nike

我有一个简单的

元素作为带有格式化功能的 contenteditable,它可以即时格式化文本(在输入事件上),并在文本末尾移动插入符号(因为在 contenteditable 上更新 innerHTML 会将插入符号移动到开头文本)。
所以在 Chrome 上一切正常,文本在你输入时被格式化,但是在使用 Firefox 时,尾随空格会在你输入时被删除,所以你不能真正写两个单独的单词,因为每次你在末尾按空格第一个词,它被 trim 。
任何想法为什么在 Firefox 上的行为不同?
fiddle :https://jsfiddle.net/mt8cp2sd/

const content = document.getElementById('content');
content.innerHTML = 'Type text here';

function formatText(text) {
return text.replaceAll('#', '<b>#</b>');
}

content.addEventListener('input', () => {
content.innerHTML = formatText(content.innerText);

let range = document.createRange();
range.selectNodeContents(content);
range.collapse(false);
let selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
});
#content {
border: solid 1px #555;
}
<html>

<body>

<p id="content" contenteditable>
</p>

</body>

</html>

最佳答案

Firefox 添加 <br>在进入空间时,Chrome 添加了 &nbsp; .
您可以设置white-space css您的 contenteditable 的属性(property)至-moz-pre-space解决这个问题。
以下是工作代码 -

const content = document.getElementById('content');

function formatText(text) {
return text.replaceAll('#', '<b>#</b>');
}

content.addEventListener('input', () => {
content.innerHTML = formatText(content.innerText);

let range = document.createRange();
range.selectNodeContents(content);
range.collapse(false);
let selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
});

let data = '';
content.innerHTML = 'Type text here';
#content {
border: solid 1px #555;
white-space: -moz-pre-space;
}
<html>

<body>

<p id="content" contenteditable>
</p>

</body>

</html>

关于javascript - Contenteditable 在 Firefox 上删除尾随空格,但在 Chrome 上没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69296163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com