2

目前我正在记录 Jquery 所做的所有更改,如下所示:

$.fn.meChangeText = 函数 ($text,$textpath) {
    $(this).html($text);
        //我在这里存储的代码块存储在一个字符串中
    $codeblock = $codeblock + "\n" +
                     "$(\"" + $textpath + "\").html(\"" + $text + "\");"

};

还有另一种方法可以将 $(this).html($text) 函数转换为字符串吗?这意味着假设我正在改变:

    $("#id1").text("我正在改变");

我希望它是这样的字符串:

var code = "$(\"#id1\").text(\"我正在改变\");"

更新

我为什么要这样做?

这是因为我想将所做的所有更改存储在数据库中。

4

2 回答 2

4

只需将文本存储在数组中:

history = {}

$.fn.meChangeText = function (text, textpath) {
    if(!history[textpath])    
        history[textpath] = [];
    history[textpath].push($(textpath).html());
    $(textpath).html(text)
})

撤消功能将是这样的:

$.fn.undo = function (textpath) {
    if(!history[textpath])    
        return
    $(textpath).html(history[textpath].pop());
})
于 2013-08-12T08:59:39.703 回答
0

这是我的解决方案,我相信与我的相比,有更好的解决方案:

$.fn.ChangeText = 函数 ($text,$textpath) {
          $(this).html($text); //改变文本框
          $temp = '$(this).html($text);'; //复制String中的变化
          $temp = $temp.replace("this",'\"'+$textpath+'\"');
          $temp = $temp.replace("$text",'\"'+$text+ '\"');
          $data.code = $data.code + $data.code;
};

但是,上述解决方案不会将代码块转换为字符串,而是将方法签名“硬编码”为字符串。因此,将此方法签名转换为 String $(this).html($text); I had to "hardcode" the method signature as String as such$temp = '$(this).html($text);';`。

如果您有更好的解决方案,请分享,以便其他人受益。

于 2013-08-14T02:40:17.093 回答