使用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++;
});
});