8 Stimmen

Wie man jQuery.css vom Plugin aus erweitert

Ich habe ein sehr einfaches Plugin geschrieben, mit dem ich 0xffccaa Format für css-Farben anstelle von '#ffccaa' (hauptsächlich, um Anführungszeichen zu vermeiden - aber auch, um eine einfache Änderung der Farben zu ermöglichen, indem man sie einfach als Ganzzahl hinzufügt).

Ich implementiere als $().xcss({}) , würde aber lieber nur die $().css({}) .

Wie kann ich die Funktionalität der $.fn.css Funktion, und gibt es irgendwelche Fallstricke, auf die ich achten muss?

Ich denke, ich werde das Gleiche auch für $.animate .

Fiedel: http://jsfiddle.net/hB4R8/

// pugin wrapper
(function($){ $.fn.xcss = function(opts){
    // loop through css color properties 
    $.each(['background', 'backgroundColor','background-color', 'color', 'borderColor','border-color'],function(i,v){
        // if set as number (will be integer - not hex at this point)
        // convert the value to `#ffccaa` format (adds padding if needed)
        if(typeof opts[v] === 'number')
            opts[v] = ('00000'+opts[v].toString(16)).replace(/.*([a-f\d]{6})$/,'#$1')
    })
    // run css funciton with modified options
    this.css(opts)
    // allow chaining
    return this
} })(jQuery)

// test the plugin
$('body').xcss({
    'background-color': 0xffccFF,
    color: 0xccffcc,
    border: '3px solid red',
    borderColor:0x0ccaa,
    padding:50
}).html('<h1>This should be a funny color</h1>')

5voto

Shawn Chin Punkte 78582

Das scheint bei mir zu funktionieren: http://jsfiddle.net/frfdj/

(function($) {
    var _css = $.fn.css; // store method being overridden
    $.fn.css = function(opts) {
        $.each(['background', 'backgroundColor', 'background-color', 'color', 'borderColor', 'border-color'], function(i, v) {
            if (typeof opts[v] === 'number') opts[v] = ('00000' + opts[v].toString(16)).replace(/.*([a-f\d]{6})$/, '#$1')
        })
        return _css.apply(this, [opts]); // call original method
    }
})(jQuery)

2voto

njbooher Punkte 612

https://github.com/aheckmann/jquery.hook/blob/master/jquery.hook.js

Basierend auf diesem Code für die Erstellung von Hooks für beliebige Funktionen, können Sie einfach $.fn.css mit einer Methode überschreiben, die tut, was Sie wollen, bevor Sie die ursprüngliche Funktion aufrufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X