2012-12-10 2 views
0

Est-il possible de créer un mixin pour un sélecteur jQuery (attention, je n'ai pas besoin de plugins, ils sont trop volumineux pour ce que je fais)?Mixin pour un sélecteur JQuery

est ici la tâche que je suis en train d'accomplir:

// Given a div I need to paint it with green for which... 
    var $container = $("#id001"); 

    // current solution 
    var do = function(e) { 

    var container = e.container; 
    container.css("backgroudColor", "green"); 
    }; 

    do({ container: $container }); // call 


    // desired solution 
    var do**Mixin** = function(e){ 
    e.css("backgroudColor", "green"); 
    }; 

    container.do(); // call 
+2

Wth est un 'mixin'? – Neal

+0

@Neal - Vous voulez vraiment que l'OP décrive complètement un concept OO dans une question?!? http://en.wikipedia.org/wiki/Mixin – Jamiec

+0

Un mixin est une magie pure, qui permet d'utiliser une fonction étrange comme si elle faisait partie de l'objet lui-même. – user1514042

Répondre

4

Je sais vous avez dit que vous n'avez pas besoin d'un plugin, mais un plugin pour ce dont vous avez besoin est très simple:

function($){ 
    $.fn.makeItGreen = function(){ 
     return this.each(function() { 
      this.css({ 
       'background-color': 'green' 
      }); 
     }); 
    } 
)(jQuery)); 

Utilisation:

$(yourSelector).makeItGreen(); 

Untested, mais .... sûr qu'il devrait fonctionner comme est.

Fiddle (avec la permission de Jamiec):

http://jsfiddle.net/mPu6X/

+0

Il ya quelques choses qui ne vont pas avec cela. 1) Vous n'avez pas besoin de '$ (this)' dans le plugin, 2) vous devriez retourner 'this.each (...)' depuis un plugin – Jamiec

+0

Edited. l'a écrit du haut de ma tête. Chiffres j'ai manqué quelque chose ou autre;) – BLSully

+0

Pour référence ici est un jsfiddle: http://jsfiddle.net/mPu6X/ – Jamiec

3

Vous pouvez faire un événement personnalisé:

$('selector').on('changeToGreen', function(){ 
    $(this).css("backgroudColor", "green"); 
}); 

"faire" il:

$('selector').trigger('changeToGreen'); 
3

Vous cherchez quelque chose comme ça? http://jsfiddle.net/WDmjS/

​jQuery.prototype.do = function(){ 
    this.css("background-color","green"); 
    return this; 
}; 

$(".mydiv").do(); 

Plus rédigée de manière concise:

​$.fn.do = function(){ 
    return this.css("background-color","green"); 
}; 
+0

Bien que 'jQuery.prototype.do' est correct, vous faites habituellement' $ .fn.do'. –

+0

En outre, OP a demandé 'return this.parent(). Css (" background-color "," green ");' mais je suis en train de cogner. C'est bien. –

+0

@ChrisLike Je ne le crois pas. – Shmiddty