我打算使用Document.execCommand()方法和contenteditable属性来构建我的自定义 WYSIWYG 编辑器。但是当我查看 的文档时Document.execCommand(),我发现它现在已经过时了。它的现代(或现存)替代品是什么?
我正在制作一个小的javascript编辑器(用于chrome扩展),有点像SO上的那个.
有一个工具栏可以处理textarea中的文本.(例如用一些模板包围所选文本)
我想知道是否有一种简单的方法来实现这一点,目前在使用系统undo/redo时,它会混淆文本(我认为系统只跟踪编辑之间的增量).
我有一个 HTML 输入。当用户在其中输入内容时,我设置了“输入”事件来处理将输入更新为用户输入内容的过滤版本(以及更新选择开始和选择结束以获得流畅的用户体验)。为了达到适当的效果,这种情况会不断发生。
然而,我注意到,每当 JS 通过 设置输入的值时input.value = '...';,输入的撤消历史记录就会消失。也就是说,在聚焦的情况下按 Ctrl-Z 不再返回到之前的状态。
有什么方法可以提供输入自定义撤消历史记录,或者以其他方式防止它丢失历史记录,同时仍然更改其值?
这是我的问题的一个最小示例:
输入顶部输入(基本在每个字符之间添加句点)后,Ctrl-Z 不会撤消。
<body>
<input type="text" id="textbox" placeholder="No undo"/><br/>
<input type="text" id="textbox2" placeholder="Undo"/>
<script>
var tbx = document.getElementById("textbox");
tbx.addEventListener('input', () => {
tbx.value = tbx.value + '.'
});
</script>
</body>Run Code Online (Sandbox Code Playgroud)
当我有一个包含特定值的输入字段,并且某些 JavaScript 更改其值时,我过去可以单击该字段并按 Ctrl-Z 来恢复旧值。
好像不行了,是不是浏览器最近更新了?我做错了什么吗?有办法让它再次发挥作用吗?
setTimeout(function () {
document.getElementById("name").value = ""
}, 2000);Run Code Online (Sandbox Code Playgroud)
<input type="text" id="name" value="Sylvain" />Run Code Online (Sandbox Code Playgroud)
过去,当您使用 javascript设置valuea 时textarea,Firefox 允许用户撤消此更改(例如,通过按 ctrl+Z)。但是,这不再有效,并且似乎没有任何体面的替代方案。
我已经尝试使用document.execCommand修改的textarea,但是这需要你自己来选择要修改的文本,它不会出现有可能在自动选择文本textarea。
我也听说过,document.createEvent("TextEvent")但我找不到关于此的太多信息。看来只能在光标处插入文本,我也需要删除文本。
创建我自己的撤消/重做系统并捕获ctrl+ Z/Y按下不是一个可接受的解决方案。
这里已经问过类似的问题,但它们只涉及在光标处插入文本,而不是完全改变 textarea 的值。
javascript ×5
html ×2
undo ×2
undo-redo ×2
css ×1
dom ×1
execcommand ×1
firefox ×1
html-input ×1
textarea ×1