基本上,我想要的是,如果用户在文本区域中选择一些文本并按下 ctrl + b,则所选文本应被星号包围。因此,我的要求如下:
1)文本区域内容:“hello this is some text”
2)用户选择一些文本并按下ctrl + b,“hello this is some text”(假设粗体部分是文本选择)
3)所以我希望文本区域的内容为:“hello this *is some* text”
4)如果用户按下ctrl + z(或任何撤消操作),则文本区域内容应恢复为“hello this is some text”。
我尝试过 如何使用JavaScript将文本插入到文本区域中?,在光标位置插入文本(JavaScript) 等类似方法,但问题在于,在大多数浏览器上执行撤销操作(ctrl + z)时,我希望文本回到步骤1的值,但实际上并没有发生。我知道stackoverflow在其编辑器中实现了自己的撤销重做功能,但我希望不要那么复杂。 必须支持Chrome和Safari。
我考虑的一种方法是定位光标并发出合成键事件。我不知道它是否有效,以及是否存在问题。
1)文本区域内容:“hello this is some text”
2)用户选择一些文本并按下ctrl + b,“hello this is some text”(假设粗体部分是文本选择)
3)所以我希望文本区域的内容为:“hello this *is some* text”
4)如果用户按下ctrl + z(或任何撤消操作),则文本区域内容应恢复为“hello this is some text”。
我尝试过 如何使用JavaScript将文本插入到文本区域中?,在光标位置插入文本(JavaScript) 等类似方法,但问题在于,在大多数浏览器上执行撤销操作(ctrl + z)时,我希望文本回到步骤1的值,但实际上并没有发生。我知道stackoverflow在其编辑器中实现了自己的撤销重做功能,但我希望不要那么复杂。 必须支持Chrome和Safari。
我考虑的一种方法是定位光标并发出合成键事件。我不知道它是否有效,以及是否存在问题。
execCommand
。请参见https://dev59.com/xFIH5IYBdhLWcg3wNayz - 可能的一种方法是通过自己跟踪编辑状态(在HTML5的本地存储中)并在每个CTRL Z中加载文本区域的前一个状态。 - Avatarvar undoStates = [];
和function storeState()
。 - Avatar