Ho scritto un plugin molto semplice che mi permette di usare il formato 0xffccaa
per i colori CSS invece di '#ffccaa'
(principalmente per evitare di scrivere virgolette - ma anche per consentire una facile modifica dei colori semplicemente aggiungendo a è un numero intero).Come estendere jQuery.css dal plugin
Sto implementando come $().xcss({})
, ma preferirei semplicemente usare $().css({})
.
Come è possibile estendere la funzionalità della funzione $.fn.css
e ci sono delle insidie a cui è necessario prestare attenzione?
Inoltre, credo che vorrò fare lo stesso per $.animate
.
Fiddle: 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>')
Che funziona benissimo. Pensavo di averlo provato prima di postare la domanda, ma quando ho memorizzato $ .fn.css in una variabile, stavo semplicemente memorizzando un riferimento - che è diventato un riferimento alla funzione sovrascritta. Stavo chiamando con 'this._css (opts)' ma ottenendo errori. Non capisco perfettamente cosa sta succedendo con 'apply' ma funziona alla grande - grazie mille. –
sei un guru jquery;) –
Neanche vicino ho paura, ma grazie per le gentili parole. Sono contento che hai risolto il tuo problema. –