jjzjj

Javascript textarea 撤消重做

coder 2024-05-07 原文

我正在制作一个小型 javascript 编辑器(用于 chrome 扩展),有点像 SO 上的那个。

文本区域中有一个用于操作文本的工具栏。 (例如用一些模板包围选定的文本)

我想知道是否有一种简单的方法可以实现这一点,目前在使用系统撤消/重做时,它会弄乱文本(我认为系统只跟踪编辑之间的增量)。

最佳答案

您或许可以模拟 textInput 事件来操作文本区域的内容。我认为以这种方式进行的更改会受到撤消/重做的影响(我知道它们在 Safari 中)

var element = document.getElementById('someTextarea');
var text = 'This text will be inserted in the textarea';
var event = document.createEvent('TextEvent');

event.initTextEvent('textInput', true, true, null, text);
element.dispatchEvent(event); // fire the event on the the textarea

基本上,插入的文本就像您自己粘贴的一样。因此,如果选择了某些内容,它将被替换为文本。如果没有选择,文本将被插入到插入符号的位置。撤消/重做应该可以正常工作(一次性撤消/重做整个插入的字符串),因为浏览器就像您自己键入/粘贴一样。

正如我所说,我知道这在 Safari 中具有撤消/重做的功能,所以我认为它在 Chrome 中也能正常工作。

关于Javascript textarea 撤消重做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7553430/

有关Javascript textarea 撤消重做的更多相关文章

  1. ruby-on-rails - 撤消 "rails generate scaffold"后是否需要撤消 "db:migrate"? - 2

    我是RoR的新手,我正在学习MichaelHartl的教程(所以请随意更正我在您认为合适的地方使用的术语)。在第2章中,我通过运行以下行创建了一个Users表:$railsgeneratescaffoldUsername:stringemail:string$bundleexecrakedb:migrate然后,我运行了下面的代码来尝试创建一个Microposts表(但是,我拼错了没有“r”的Micropost!)...$railsgeneratescaffoldMiropostcontent:stringuser_id:integer$bundleexecrakedb:migrate

  2. ruby - 在 Ruby 中撤消 zip - 2

    这个问题在这里已经有了答案:HowtounzipanArray?(1个回答)关闭8年前。在Python中,我可以通过返回zip来获得zip的“逆”a=[1,2,3]b=[4,5,6]c=zip(a,b)#[(1,4),(2,5),(3,6)]如果我改为从c开始,我可以使用以下方法返回a和bc=[(1,4),(2,5),(3,6)]a,b=zip(*c)但是,在Ruby中,似乎只有一个zip方法,因此我不确定我能否以完全相同的方式做到这一点......Ruby中是否有某种类似的好习惯用法可用于“解压缩”列表的列表?我知道你可以做c[0].zip(*c[1..-1])本质上在语义上是一样的

  3. ruby - Ruby 中重做和重试语句的目的是什么? - 2

    redo我能想到的唯一用例是写入套接字或从数据库读取等操作,但如果这些操作失败一次,后续尝试很可能也会失败,因此它对我来说似乎仍然有点毫无意义,至于retry我真的想不出它在任何情况下都有用。这对我来说似乎毫无意义,因为我不知道或不使用Ruby,但我渴望有一天创造一种很棒的语言,所以我想至少知道一些最流行的语言设计背后的原因在那里。 最佳答案 想法是在调用redo或retry之前更改一些内容,希望您所做的任何事情第二次都能正常工作。我没有redo的示例,但我们已经在我正在处理的应用程序中找到了retry的用途。基本上,如果您有一些代

  4. ruby - 撤消自动缩进 - 2

    当你使用带自动缩进模式的irb时,end语句会额外缩进一层deffoo...end而不是显示普通的缩进约定:deffoo...end因为你不能提前告诉irb你要在下一行越狱一个关卡。这个问题已经在其他地方得到解决,比如here或here,但都没有给出令人满意的答案。他们只是建议放弃。但是,如果我们可以最低限度地覆盖一些irb方法,以便自动缩进将插入空格而不是在提示区域,而是在您键入的行的开头,那么默认情况下,irb仍将插入空格,但我们将能够用退格键删除一些空格。这可能吗?或者,如果这不现实,那么是否可以让irb从屏幕上删除最后一行,并在您在包含end的行上按Enter后立即以适当的缩进

  5. ruby-on-rails - 如何恢复/撤消对 Activerecord 对象的本地更改? - 2

    有没有办法撤消/恢复对Activerecord对象的任何本地更改。例如:user=User.firstuser.name#"Fred"user.name="Sam"user.name_was#"Fred"user.revertuser.name#"Fred"我知道我可以执行user.reload但我不必访问数据库来执行此操作,因为旧值存储在对象的状态中。最好是Rails3解决方案。 最佳答案 如thisanswer中所述Rails4.2在ActiveModel::Dirty中引入了restore_attributes方法:user=

  6. ruby - 有没有办法在 Test::Unit 中撤消 any_instance 的摩卡 stub - 2

    很像thisquestion,我也在使用RyanBates的nifty_scaffold。它具有使用Mocha的any_instance的理想方面。在Controller后面的模型对象中强制进入“无效”状态的方法。与我链接到的问题不同,我没有使用RSpec,而是使用Test::Unit。这意味着那里的两个以RSpec为中心的解决方案对我不起作用。是否有通用的(即:与Test::Unit一起使用)删除any_instancestub的方法?我认为它导致我的测试出现错误,我想验证这一点。 最佳答案 碰巧,Mocha0.10.0允许uns

  7. ruby-on-rails - 在 Rails 中撤消脚手架 - 2

    有什么方法可以“撤销”Rails中脚手架命令的效果吗? 最佳答案 首先,如果您已经运行了由scaffold命令生成的迁移,则必须先执行回滚。rakedb:rollback您可以使用以下方式创建脚手架:railsgeneratescaffoldMyFoo(或类似的),并且您可以销毁/撤消它使用railsdestroyscaffoldMyFoo这将删除所有由generate创建的文件,但不会删除您手动进行的任何其他更改。 关于ruby-on-rails-在Rails中撤消脚手架,我们在Sta

  8. javascript - 撤消实现 - DOM 操作 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion是否有可用于在JavaScript中实现DOM元素操作的撤消/重做功能的库?我正在编写一个围绕DOM元素移动的prototype.js应用程序(memonaut),允许编辑和删除这些元素。每个操作的元素都有事件处理程序和其他对象。不确定我是否需要为此推出我自己的命令模式实现。当然,必须有可用的东西吗?如果没有,建议和指示将是一个很大的帮助。

  9. javascript - 如何使用撤消创建可观察数组? - 2

    我正在尝试将knockoutJS添加到我们网站的搜索页面。目前您打开了一个jQuery对话框,其中有许多您可以选择的标准复选框。有多个对话框具有多种类型的标准。当您打开对话框时,复选框不会生效,直到您点击“更新”按钮,如果您单击取消或只是关闭窗口,您所做的更改将被还原并且对话框将设置为之前的状态。我读了this和其他一些帖子。然而,这似乎只适用于ko.observable,我似乎无法让它与ko.observableArray一起工作。有没有人完成过这个或者有什么想法?我想做的一个例子:HTML:MaleFemaleCancelUpdateJavascript:varviewModel=

  10. javascript - 使用 Canvas 撤消/重做绘画程序 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我需要为我的绘画程序实现一个撤消/重做系统:http://www.taffatech.com/Paint.html我想出的想法是有2个数组堆栈,一个用于撤消,一个用于重做。每当您绘制并释放鼠标时,它都会通过推送将Canvas图像保存到撤消数组堆栈。如果你画别的东西然后释放它也会做同样的事情。但是,如果您单击撤消,它将弹出撤消数组的顶部图像并将其打印到Can

随机推荐