所有jQuery对象的公共属性

时间:2011-06-28 19:28:06

标签: javascript jquery

我希望在我的对象中使用它将使用的所有jQuery对象创建一个属性。我是JavaScript的新手,这就是我想要一个建议的原因。我可以这样做吗?

var myVar = {
    init: function() {
        //...
        this.obj = {
            id1: $('#id1'),
            id2: $('#id2'),
            id3: $('#id3')
        }
        this.method2();
    },
    method1: function() {
        alert(this.obj.id1.html()) // some work with id1
    },
    method2: function() {
        alert(this.obj.id1.html()) // some work with id1
    }
};
$(function() {
    myVar.init();
    myVar.method1();
});

2 个答案:

答案 0 :(得分:2)

您可以尝试扩展jQuery以直接在元素上使用这些方法。

$.fn.method1 = function () {
    alert(this.html());
    return this;
};

$("#id1").method1();

理想情况下,您可以将这些放在自己的命名空间中,以免污染jQuery命名空间(以避免冲突等)。在扩展jQuery here时,您可以阅读有关一些最佳实践的更多信息。

答案 1 :(得分:2)

您的代码似乎很好。我能用你的代码预见到的唯一问题是,DOM在运行时可能没有准备就绪:

var myVar = {
    init: function() {
        //...
        this.obj = {
            id1: $('#id1'),
            id2: $('#id2'),
            id3: $('#id3')
        }
    },
    method1: function() {
        alert(this.obj.id1.html()) // some work with id1
    },
    method2: function() {
        alert(this.obj.id1.html())
    }
};

  // run the init code (and any code that relies on init) after the DOM is ready
$(function() {
    myVar.init();
    myVar.method1();
});

示例: http://jsfiddle.net/2HppG/1/

(在示例中,我删除了默认情况下jsFiddle提供的标准DOM Ready包装。)