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?

Reply via email to