【问题标题】:How to use eval on jquery plugin variable?如何在 jquery 插件变量上使用 eval?
【发布时间】:2013-08-14 18:34:55
【问题描述】:

我正在使用 JQuery 插件 pnotify。 我想缩短这段代码:

$.pnotify.defaults.styling = "jqueryui";
    $.pnotify.defaults.delay = 1500;
    $.pnotify.defaults.title = 'Error'
    $.pnotify.defaults.mouse_reset = false;
    $.pnotify.defaults.history = false;

变成这样:

var darray = { 'styling':'\'jqueryui\'', 'delay':'1500', 'title':'\'Error\'', 'mouse_reset':'false', 'history':'false' };
$.each(darray, function(option,choice){
        eval("var $.pnotify.defaults." + option + "=" + choice + ";");
        });

然而,尽管尝试了各种各样的事情,我还是失败了。以下是我尝试过的一些事情:

var darray = { 'styling':'\'jqueryui\'', 'delay':'1500', 'title':'\'Error\'', 'mouse_reset':'false', 'history':'false' };
$.each(darray, function(option,choice){
            eval("var $.pnotify.defaults." + option + "=" + choice + ";");
            });

JSONstring='var $.pnotify.defaults.' + option + "=" + choice + ";";
$.parseJSON(JSONstring);

string99 = 'var $\.pnotify\.defaults\.' + option
$.parseJSON('{string99=choice}');

option='var $.pnotify.defaults.'+option;
var JSONObject= {'option':choice};
$.parseJSON(JSONObject);

小提琴:http://jsfiddle.net/morossive/kayKn/

【问题讨论】:

    标签: dry pnotify


    【解决方案1】:

    你可以试试这个(未经测试,但你明白了):

    var darray = {
        styling: 'jqueryui',
        delay: 1500,
        title: 'Error',
        mouse_reset: false,
        history: false
    };
    
    for (var mbr in darray) {
        $.pnotify.defaults[mbr] = darray[mbr];
    }
    

    因为 JavaScript 将对象视为哈希表,所以我们可以遍历它们的“键”(for (var mbr in darray)) 并将新值分配给对象中的新键。例如:

    var obj = {...};
    
    // The following are equivalent:
    obj.x = 5;
    obj['x'] = 5;
    

    但是,我认为可能有一个更优雅的解决方案来解决您的问题(但是,如果您担心覆盖 $.pnotify.defaults 中的预先存在的值,请不要使用它):

    $.pnotify.defaults = {
        styling: 'jqueryui',
        delay: 1500,
        title: 'Error',
        mouse_reset: false,
        history: false
    };
    

    我知道你问过如何使用 eval 来解决这个问题,但我认为总的来说,使用 eval 的任何替代方法都可能更好。

    【讨论】:

    • 第二个可能不起作用,因为它会覆盖$.pnotify.defaults 中的所有内容,而第一个会添加/更改特定设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2015-06-19
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多