javascript - 从插件的辅助功能访问 jQuery 对象

标签 javascript jquery plugins jquery-plugins

我正在编写一个 jQuery 插件,该插件具有辅助功能(请参阅 jQuery support )。我希望能够循环 jQuery 对象包含的元素,以便对每个元素执行某些操作。但是,我看不到如何访问原始对象,因为在辅助函数的范围内,this 显然指的是插件对象。

有什么方法可以访问原始元素,还是我必须开始考虑替代(jQuery UI 式)技术?

代码看起来像这样:

(function ($) {
    'use strict';
    var
        myNewPlugin,
        mySecondaryFunction;

    mySecondaryFunction = function () {
        // the secondary function

        // `this` refers to myNewPlugin
    };

    myNewPlugin = (function () {
        var closedPrivateVariables;

        return function () {
            // the function called from the jQuery object

            return this;
        };
    }());

    myNewPlugin.mySecondaryFunction;

    $.fn.myNewPlugin = myNewPlugin;
}(jQuery));

不重复(听起来相似但不相同的问题)

最佳答案

标准插件模式是这样的:

(function ($) {
    $.fn.myPlugin = function (options) {
        var settings = {
            // settings
        };
        return this.each(function (i, elem) {
            //do stuff
        });
    };
})(jQuery);

要扩展辅助函数并维护对所选 jQuery 对象的引用,只需在 .each() 迭代器中捕获对其的引用:

(function ($) {
    $.fn.myPlugin = function (options) {
        var settings = {
            // settings
        },
        self = null,
        selectedDOMElements = [],
        mySecondaryFunction = function () {
            var i = 0;
            //do more stuff
            self.css('display', 'inline-block'); //original jQuery object
            for (i = 0; i , selectedDOMElements.length; i += 1) {
                $(selectedDOMElements[i]).css('color', '#F00'); //individual child elements of the original jQuery object
            }
        };
        self = this; //store original jQuery object
        return this.each(function (i, elem) {
            selectedDOMElements.push(elem); //store individual child elements of the original jQuery object
            //do stuff
        });
    };
})(jQuery);

混合搭配来完成您想做的事情。

更新:

试试这个:

(function ($) {
    var self;
    $.fn.myPlugin = function (options) {
        var settings = {
            // settings
        };
        self = this; //store original jQuery object
        return self.each(function (i, elem) {
            //do stuff
        });
    };
    $.fn.myPlugin.mySecondaryFunction = function mySecondaryFunction(options) {
        var settings = {
            // settings
        };
        return self.each(function (i, elem) { //apply to original jQuery object
            //do stuff
        });
    };
})(jQuery);

//call like this
$(selector).myPlugin();
$(selector).myPlugin.mySecondaryFunction();

fiddle 示例:http://jsfiddle.net/bv7PG/

关于javascript - 从插件的辅助功能访问 jQuery 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17280693/

相关文章:

javascript - 带有固定标题的巨大 HTML 表格,标题单元格和行单元格之间对齐

plugins - onContentBeforeSave 和 onContentAfterSave 未触发

javascript - 如何使用 DOJO 更改 src 并重新加载 iframe?

javascript - 在框架之外使用 Zurb Foundation 工具提示

javascript - 如何勾选每组checkbox至少勾选一个

javascript - 如何使用 jquery 向输入添加值而不是用新值替换输入

javascript - 函数未在 onclick 事件中调用

maven - 有没有 jenkins 的 maven3 插件?

java - Eclipse插件开发-关闭Eclipse透视重置

javascript - ES2017 规范中的 "An object is a member of Object"