コードを機能させるには、コードをリファクタリングする必要があります。jQuery Boilerplateの使用を検討してください。
;(function ( $, window, undefined ) {
var pluginName = 'convertSelect',
document = window.document,
defaults = {
propertyName: "value"
};
function Plugin( element, options ) {
this.element = element;
this.options = $.extend( {}, defaults, options) ;
this._defaults = defaults;
this._name = pluginName;
this.init();
}
Plugin.prototype = {
// Private methods start with underscore
_generateMarkup: function() {
// you can access 'this' which refers to the constructor
// so you have access the all the properties an methods
// of the prototype, for example:
var o = this.options
},
// Public methods
slideDownOptions: function() { ... }
}
$.fn[ pluginName ] = function ( options ) {
return this.each(function () {
if (!$.data( this, 'plugin_' + pluginName ) ) {
$.data( this, 'plugin_' + pluginName, new Plugin( this, options ) );
}
});
};
}(jQuery, window));
次に、次のようにパブリック メソッドを呼び出すことができます。
var $select = $('select').convertSelect().data('plugin_convertSelect');
$select.slideDownOptions();
私は自分のプロジェクトで同様の問題を抱えていました。最近、あまりにも多くのメソッドで jQuery 名前空間を汚染していたため、全体をリファクタリングする必要がありました。jQuery Boilerplate は非常にうまく機能します。これは公式の jQuery ガイドに基づいていますが、多少のひねりがあります。このプラグイン パターンの動作を見たい場合は、https://github.com/elclanrs/jq-idealforms/tree/master/js/srcをご覧ください。