【问题标题】:jQuery plug-in set options inside an optionjQuery插件在一个选项里面设置选项
【发布时间】:2014-10-11 22:26:47
【问题描述】:

不确定我的标题是否是询问如何执行此操作的正确方法,但是...
这里我有一个名为 func 的插件,它设置默认选项:

(function($){
$.fn.func= function(options){

    var settings = $.extend({
        color:'white',
        hoverColor: 'black'
    },options);

    return this.each(function(){
        if(settings.color){
            $(this).css('color',settings.color);
        }
        if(settings.hoverColor){
            $(this).css('color',settings.hoverColor);
        }
    }

现在用户可以在此处将文本颜色更改为他们想要的颜色:

$('#selector').func({
    color:'blue',
    hoverColor: 'green'
});

现在这是我想要完成的事情:我希望能够分解悬停和链接选项,如下所示:

$('#selector').func({
    link:
        color: 'blue'
    ,hover:
        color: 'green'
});

类似于 jQuery 验证插件HERE,它们分解了规则和消息选项。如果您需要更多信息,请告诉我。感谢您的所有帮助。

【问题讨论】:

    标签: javascript jquery plugins jquery-plugins


    【解决方案1】:

    你想要完成的语法是无效的,所以你总是会遇到语法错误。

    试试

    $('#selector').func({
        link: {color: 'blue'},
        hover: {color: 'green'}
    });
    

    当然,您必须在初始 settings 对象中使用相同的结构(使用深拷贝版本的 $.extend,通过提供 true 作为第一个参数,因为我们正在使用对象)

    var settings = $.extend(true, {
            link: {color: 'white'},
            hover: {color: 'black'}
        },options);
    

    您可以通过settings.link.colorsettings.hover.color 访问它们

    【讨论】:

    • 非常感谢您的帮助,这正是我想要的。我想这就像你的例子一样,我只是想不出怎么写。谢谢
    • $.extend 的深拷贝版本是什么意思?我很好奇。
    • @mitch,见api.jquery.com/jQuery.extend 第二个版本将布尔值作为其第一个参数将执行深层复制(对象的合并是递归的)。这在复制对象时是必需的,因为 JS 的默认行为是创建对对象的引用。 (所以var a = {}, b=a; 然后b['key'] = 'value' 将同时显示在ab 中,因为它们引用了同一个对象。
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 2010-11-12
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    相关资源
    最近更新 更多