2011-05-09 27 views
1

我正在嘗試編寫我的第一個小插件,而且我有點碰壁。自定義插件,添加類的選項

我的插件是一個簡單的.replace()函數,它可以找到任何openReplace和closeReplace 值,並使用我的tagOpen和tagClose值切換它們。

我遇到的問題是var colorText被稱爲抓住我的選項我希望能夠添加一個類到正在使用的tagOpen值,並且能夠在我的選項中更改它,基本上只是讓用戶誰使用它可以自由地在調用函數時使用自己的類名,並在選項中設置類名。

希望有道理,隨時給我反饋我的插件的代碼結構。

感謝

(function($){ 

    $.fn.TextColor = function(options) { 

    var defaults = { 
     class   :'', 
     openReplace  :'{', 
     closeReplace  :'}', 
     tagOpen   :'<span>', 
     tagClose   :'</span>' 
    }; 

    return this.each(function() {   

     if (options) { 
     $.extend(defaults, options); 
     } 

     var obj = $(this); 

     //Add a var to be able to add a class to tagOpen here and replace with defaults.tagOpen in the colorText variable below 

     var colorText = obj.html().replace(defaults.openReplace,defaults.tagOpen).replace(defaults.closeReplace,defaults.tagClose); 

     obj.html(colorText); 


    }); 

    }; 
})(jQuery); 

回答

0

怎麼樣的正則表達式+建築用jQuery標籤:

(function($){ 
    $.fn.TextColor = function(options) { 

var defaults = { 
    className  :'myClass', 
    openReplace  :'{', 
    closeReplace  :'}', 
    openTag   :'<span>', 
    closeTag   :'</span>' 
}; 

if (options) { 
    $.extend(defaults, options); 
} 

return this.each(function() {   
    var $obj = $(this); 
    var html = = obj.html(); 
    var regex = new RegExp(defaults.openReplace + '(.+?)' + defaults.closeReplace, 'gi'); 

    html = html.replace(regex, function(outerMatch, innerMatch) { 
     var wrapper = $("<div>"); 
     var tag = $(defaults.openTag) 
         .addClass(defaults.className) 
         .html(innerMatch) 
         .appendTo(wrapper); 

    return wrapper.html();     
    }); 

    obj.html(colorText); 

}); 

}; })(jQuery); 

記:你應該使用類不要因爲它是在IE瀏覽器中的保留字,並可能導致問題。

+0

謝謝你的幫助Guy,只需要改變幾行來擺脫一些錯誤,一切都很好。有一個問題,你介意解釋一下你的代碼。我真的非常理解它,而不是複製和粘貼它。不確定在新的RegExp中+'(。+?)'+是什麼,如果你可以解釋outerMatch,innerMatch函數以及爲什麼你設置了「var wrapper」。如果你能做到這一點,並幫助我理解這一點,那就太好了!謝啦。 – Bresaine 2011-05-10 01:35:31

+0

當然 - 1.使用'new Regex()'而不是普通舊/{(.+?)}/語法的原因是我們需要從字符串中動態地使用正則表達式。 2.替換函數可以得到一個方法爲arg。該方法在每個匹配上迭代並用函數的返回值替換它(非常有用!)。爲了讓事情變得更好,它甚至會收到兩個參數 - 匹配和innermatch(正則表達式中的括號「()」中的任何內容)。您可以通過在替換函數中鍵入console.log(參數)來檢查參數。 3. jquery讓你通過$(' Guy 2011-05-10 02:55:46

相關問題