May be something like this?
(function($) { $.fn.editable = function(options) { var defaults = { // default value declarations } var opts = $.extend(defaults, options); return this.each(function() { var $this = $(this); // Cache a jQuery version of this var tag = $this.get(0).tagName; var obj; this.doSomething = obj.doSomething; switch (tag) { case 'DIV': obj = new $.myDiv(); obj.init(); break; case 'IMG': obj = new $.myImg(); obj.init(); break; } }); } })(jQuery); jQuery.myImg = function() { { this.init = initImg; this.doSomething = imgFunction; return this; function initImg() { } function imgFunction() { } } jQuery.myDiv= function() { this.init = initDiv; this.doSomething = divFunction; return this; function initDiv() { } function divFunction() { } } On Jul 12, 6:37 pm, Harvey <scottandrewhar...@gmail.com> wrote: > Hey, > > I'm in the process of developing a new plugin but the way I have > structured the codes doesn't seem quite right to me so I'm hoping > someone might be able to offer a better way to do it. > > The plugin itself has different behaviour if called on different types > of elements (images, divs etc) with a range of shared functions used > across all element types. > > This is the basic structure I have so far: > > (function ($) { > $.fn.editable = function (options) { > var defaults = { > // default value declarations > } > > var opts = $.extend(defaults, options); > > return this.each(function () { > var $this = $(this); // Cache a jQuery version of this > var tag = $this.get(0).tagName; > > switch(tag) { > case 'DIV': initDiv(); break; > case 'IMG': initImage(); break; > } > > function initDiv () { > // initialise the plugin to work with divs > } > > function initImage () { > // initialise the plugin to work with images > } > > // functions used by divs only > function divFunction () { > // body... > } > > // functions used by images only > function imageFunction () { > // body... > } > > // functions used by divs and images > function sharedFunction () { > // body... > } > > }); > } > > })(jQuery); > > The reason it does seem right to me is because any instance of the > plugin called on a div will also contain all the code that is used if > it was an image even though the code won't be used. > > Can any offer something better?