使用jquery撤消上次执行的函数

使用jquery撤消上次执行的函数,jquery,undo,Jquery,Undo,是否有机会撤消上次调用函数的执行。例如,我单击一个 <nav><a href="foo">...</a></nav> 我正在寻找可以撤消最后一个函数执行的东西。有什么建议吗?Thx!!!:) JavaScript引擎不会为您保存任何以前的状态,您必须自己保存。这意味着您必须跟踪要操纵的对象的以前和当前状态 在您的例子中,您可以有一个“先前活动”对象的列表,然后您的“撤消”将基于该列表激活先前的元素 我还没有试过这个代码,但你应该从中得到启发。此外

是否有机会撤消上次调用函数的执行。例如,我单击一个

<nav><a href="foo">...</a></nav>

我正在寻找可以撤消最后一个函数执行的东西。有什么建议吗?Thx!!!:)

JavaScript引擎不会为您保存任何以前的状态,您必须自己保存。这意味着您必须跟踪要操纵的对象的以前和当前状态

在您的例子中,您可以有一个“先前活动”对象的列表,然后您的“撤消”将基于该列表激活先前的元素

我还没有试过这个代码,但你应该从中得到启发。此外,如果阵列有问题,请查看

var undoList = new Array();

function manipulate(elem) {
    $('nav a').removeClass('active');
    $(elem).addClass('active');
    //...
}

function undo() {
    if(undoList.length > 0) {
        var elemToManipulate = undoList.pop();
        manipulate(elemToManipulate);
    }        
}

function manipulateWithUndo(elem) {
    undoList.push(elem);
    manipulate(elem);
}
试试这个:

var active=0;

    if(active==0)
    {
    //write here your code
    active=1;
    }else
    {
    //write here your "undo" code
    //example: Write your code but in reverse order: addclass().removeclass().removeclass()
    active=0;
    }
使用,即

命令对象对于实现多级撤消非常有用- 如果程序中的所有用户操作都作为命令对象实现, 程序可以保存最近执行的命令的堆栈。 当用户想要撤销命令时,程序只需弹出 最新的命令对象并执行其undo()方法

基本JavaScript实现可以如下所示:

function command(instance) {    
  this.command = instance;
  this.done = [];

  this.execute = function execute() {
    this.command.execute();
    this.done.push(this.command);
  };      
  this.undo = function undo() {
    var command = this.done.pop();
    command.undo();    
  };  
}
要测试这一点,请构造简单DOM:

<ul>
    <li>first</li>
</ul>
您的页面将从

  • 首先

  • 首先
  • 新的
在执行以下各项时:

appendcommand.undo();
将此页面转换为其原始状态:

  • 首先

-或-


在缩小的示例中,您似乎缺少
href
中的
#
。好的,谢谢。老实说,我不知道该怎么做。只是试图在互联网上找到一些东西,但找不到任何相关的东西。你能给我一个提示或一个片段吗?添加了一个片段作为这个想法的例子。虽然这个代码片段可以解决这个问题,但确实有助于提高你文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。对此,我很抱歉,我只想给出一个简单的答案。我认为关于这个测验有很多解释。非常优雅的解决方案!
var appendcommand = new command({
  execute: function(){
    $('ul').append('<li>new</li>');
  },
  undo: function(){
      $('ul li:last').remove();
  }
});
appendcommand.execute();
appendcommand.undo();
$('nav a').unbind()
$('nav a').off()
    var clk=1; 
$(document).ready(function(){
    $("button").on('click',function(){
        if(clk%2==1){
           $('#sidebar').addClass('active');
             $(".main").css("display", "flex");
         }else{

             $('#sidebar').removeClass('active');
             $(".main").css("display", "");
        }

        clk++;
    });
});