扩展到jQuery插件,无需触及原始插件代码

时间:2013-04-22 03:30:42

标签: javascript jquery

现在我正在使用一个很棒的cookie处理程序,我找到了https://github.com/carhartl/jquery-cookie用于jquery。唯一的问题是,它只会按天设置cookie。我希望能够绕过它并在某些情况下将它们设置为秒/小时,甚至可能在特定时间。

看看这个插件,我知道我在哪里专门做了改动。但我想知道是否有一种方法用我自己的自定义代码以某种方式扩展插件,所以当我像平常一样调用插件时我可以使用我设置的参数。整个想法是避免入侵初始脚本,因此如果作者确实及时发布了新版本,我可以相应地更新它,而不会丢失我在升级过程中可能忘记的任何更改。

在当前的插件行44-47中有

if (typeof options.expires === 'number') {
                var days = options.expires, t = options.expires = new Date();
                t.setDate(t.getDate() + days);
            }

我知道我可以直接攻击它并按我的意愿行事。但这个想法再次是通过一些外部手段使用相同的整体脚本

3 个答案:

答案 0 :(得分:1)

正如其他人所说,我认为该插件已经支持您要添加的功能。 但我要回答你的问题> I am wondering is there a means of extending the plugin with my own custom code

插件将$.cookie设置为具有三个参数(function (key, value, options))的函数。您可以这样扩展它:

// in a js file after including `jquery.cookies.js`
(function () {
    var cookie = $.cookie;
    $.cookie = function (key, value, options) {
        // TODO: add your code here

        $.cookie = cookie;
        var out = $.cookie(key, value, options);
        $.cookie = this;
        return out;
    }
}());

答案 1 :(得分:0)

我不认为这个假设是正确的。

你可以使用

$.cookie('my-key', 'my-valye', {
    expires: new Date()
})

var expires = new Date();
expires.setHours(expires.getHours() + 1);
$.cookie('my-key', 'my-valye', {
    expires: expires 
})

答案 2 :(得分:0)

您可以将所需的秒数除以86400.因此,对于30秒,请使用:

$.cookie('the_cookie', 'the_value', { expires: 30/86400, path: '/' });