我的内部函数'getFontSize'似乎遇到了范围问题。我可以从插件中选择DOM元素,但不能从'getFontSize'函数中选择
(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);
答案 0 :(得分:0)
根据jquery插件创建页面,我认为另一个想法是在匿名jquery插件函数中放置函数
http://learn.jquery.com/plugins/basic-plugin-creation/它应该是
$.fn.getFontSize = function(selector,dSize) { ... }
而不是具有$.fn
命名空间之外的外部函数
答案 1 :(得分:0)
感谢大家的建议。我能够以两种不同的方式让它工作:
按照以下代码将'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是按照以下教程在插件函数中移动'default'对象:http://www.codeproject.com/Articles/291290/How-To-Write-Plugin-in-jQuery
第二种选择看起来更广泛,所以我改用了它。