首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JavaScript DOM元素放在object中并访问它们?

如何将JavaScript DOM元素放在object中并访问它们?
EN

Stack Overflow用户
提问于 2013-05-22 01:42:32
回答 6查看 115关注 0票数 2

我希望将所有JavaScript DOM元素查询放在一个对象中,并在整个脚本中访问它们。以下是我正在使用的当前设计模式,如果可能的话,我想坚持使用这种格式:

代码语言:javascript
复制
(function ($) {

EXAMPLE = {

    basicExample : function () {

        config : {
            logo : $('#logo'),
            footer : $('footer'),
        },

        EXAMPLE.config.logo.hover(function () {
            $(this).addClass('example');
        }, function () {
            $(this).removeClass('example');
        });
}

EXAMPLE.basicExample();

})(jQuery);

访问徽标DOM元素似乎不是这样工作的:EXAMPLE.config.logo

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-22 01:50:14

您确实把config部分放错了地方--不是放在EXAMPLE对象文字中,而是放在了basicExample函数中(在这个函数中,它相当于一个内部没有op表达式语句的labelled块语句,所以它没有抛出错误)。相反,它应该是

代码语言:javascript
复制
(function ($) {
    EXAMPLE = {
        config : {
            logo : $('#logo'),
            footer : $('footer'),
        },
        basicExample : function () {
            EXAMPLE.config.logo.hover(function () {
                $(this).addClass('example');
            }, function () {
                $(this).removeClass('example');
            });
        }
    };
    EXAMPLE.basicExample();
})(jQuery);

但是,您需要将初始化放入DOM就绪的处理程序中,否则它可能找不到这些元素。所以要么使用

代码语言:javascript
复制
EXAMPLE = {
    init : function($) {
        EXAMPLE.config = {
            logo : $('#logo'),
            footer : $('footer'),
        };
        EXAMPLE.basicExample();
    },
    basicExample : function() {
        this.config.logo.hover(function () {
            jQuery(this).addClass('example');
        }, function () {
            jQuery(this).removeClass('example');
        });
    }
};
jQuery(EXAMPLE.init);

或者只是将所有内容放在处理程序中,而不使用任何模块模式和额外的basicExample函数:

代码语言:javascript
复制
jQuery(function ($) {
    var config = {
        logo : $('#logo'),
        footer : $('footer'),
    };
    config.logo.hover(function () {
        $(this).addClass('example');
    }, function () {
        $(this).removeClass('example');
    });
});
票数 4
EN

Stack Overflow用户

发布于 2013-05-22 01:47:54

您正在使用对象文字表示法来定义一个对象,并且在该对象中定义一个构造函数,该函数需要通过new使用才能有用。我相信您想要的是创建一个包含单个对象的命名空间。

尝试删除该函数,您应该能够访问它,因此:

代码语言:javascript
复制
var EXAMPLE = {
   basicExample : {
     config : {
         logo : $('#logo')
     }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2013-05-22 01:57:35

我建议像这样声明一个全局对象:

代码语言:javascript
复制
EXAMPLE = {
    basicExample: function () {
        this.config = {
            logo: $('#logo'),
            footer: $('footer')
        };
        return this;
    },
    applyHover: function () {
        this.config.logo.hover(function () {
            $(this).addClass('example');
        }, function () {
            $(this).removeClass('example');
        });
    }
};

然后在document ready上调用.basicExample().applyHover()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16676252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档