2012-12-10 64 views
0

是否有可能爲jQuery選擇器創建混合(請注意,我不需要任何插件,它們對於我所做的操作而言太笨重)?Mixin爲JQuery選擇器

這裏是我想要完成的任務:

// 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

問心無愧是'mixin'? – Neal

+0

@Neal - 你真的希望OP在一個問題中完全描述OO概念?!? http://en.wikipedia.org/wiki/Mixin – Jamiec

+0

mixin是一種純粹的魔法,它允許使用一個奇怪的函數,就好像它是對象本身的一部分。 – user1514042

回答

4

我知道你說你不需要插件,但是你需要的插件非常簡單:

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

用途:

$(yourSelector).makeItGreen(); 

未經檢驗的,但是....敢肯定它應該工作。

小提琴(Jamiec提供):

http://jsfiddle.net/mPu6X/

+0

這有一些問題。 1)你不需要'$(this)'在插件中,2)你應該從編輯插件 – Jamiec

+0

返回'this.each(...)'。把它從頭頂寫下來。數字我錯過了什麼或其他;) – BLSully

+0

這裏是一個jsfiddle:http://jsfiddle.net/mPu6X/ – Jamiec

3

您可以自定義事件:

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

「做」 吧:

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

您正在尋找這樣的事情? http://jsfiddle.net/WDmjS/

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

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

更簡明地寫着:

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

雖然'jQuery.prototype.do'是正確的,你通常做'$ .fn.do'。 –

+0

另外,OP要求'return this.parent().css(「background-color」,「green」);'但我很挑剔。這很棒。 –

+0

@ChrisLike我不相信他是。 – Shmiddty