j查询插件范围私有函数的问题



我的内部函数"getFontSize"似乎遇到了范围问题。我能够从插件中选择 DOM 元素,但不能从"getFontSize"函数中选择 DOM 元素

    (function ($) {
        $.fn.pluginName = function(options) {
            options = $.extend({}, $.fn.pluginName.defaults, options);
            return this.each(function() {
                // do stuff
            });
        } 
        // Default options
        $.fn.pluginName.defaults = {
            fontSize: getFontSize('body', '16px')
        }; // defaults close
        // get font-size
        function getFontSize(selector, dSize) {
            var fSize = $(selector).css('font-size') || dSize;
            fSize = (fSize.indexOf('px') >= 0) ? fSize : dSize;
            var factor = (fSize.indexOf('em') >= 0) ? fSize : '1';
            factor = (fSize.indexOf('%') >= 0) ? String(Number(fSize.replace(/[^0-9.]+/g, "")) / 100) : '1';
            return Number(fSize.replace(/[^0-9.]+/g, "") * Number(factor.replace(/[^0-9.]+/g, "")));
        };
    })(jQuery);

另一个想法是将函数放置在我认为的匿名jquery插件函数中,根据jquery插件创建页面

http://learn.jquery.com/plugins/basic-plugin-creation/应该是

$.fn.getFontSize = function(selector,dSize) { ... } 而不是具有 $.fn 命名空间之外的外部函数,

但是我还没有测试过。

感谢大家的建议。我能够以两种不同的方式让它工作:

  1. 按照以下代码将"defaults"对象转换为函数:

    (function ($) {
        $.fn.pluginName = function(options) {
            options = $.extend({}, $.fn.pluginName.defaults(), options);
            return this.each(function() {
                // do stuff
            });
        } 
        // Default options
        $.fn.pluginName.defaults = function (){
            var optns = {
                fontSize: getFontSize('body', '16px')
            }
            return optns;
        };
        // get font-size
        function getFontSize(selector, dSize) {
            var fSize = $(selector).css('font-size') || dSize;
            fSize = (fSize.indexOf('px') >= 0) ? fSize : dSize;
            var factor = (fSize.indexOf('em') >= 0) ? fSize : '1';
            factor = (fSize.indexOf('%') >= 0) ? String(Number(fSize.replace(/[^0-9.]+/g, "")) / 100) : '1';
            return Number(fSize.replace(/[^0-9.]+/g, "") * Number(factor.replace(/[^0-9.]+/g, "")));
        };
    })(jQuery);
    
  2. 选项 2 是按照以下教程在插件函数内移动"默认"对象:http://www.codeproject.com/Articles/291290/How-To-Write-Plugin-in-jQuery

第二种选择似乎规定得更广泛,所以我使用了它。

最新更新