What I want to do is to set options into plugin like you normally would, but to also override those options with html5 data-attributes.
Here I have exactly that (jsfiddle), but there's a slight problem with that.
JSFiddle Code:
(function($){
$.fn.extend({
test: function(options) {
var defaults = {
background: null,
height: null
};
var options = $.extend( defaults, options);
return this.each(function() {
var o = options;
var obj = $(this);
var objD = obj.data();
// background
if ( !objD.background) {
var cBG = o.background;
}
else {
var cBG = objD.background;
}
// Opacity
if ( !objD.height) {
var cH = o.height;
}
else {
var cH = objD.height;
}
obj.css({
background: cBG,
height: cH
});
});
}
});
})(jQuery);
$(document).ready(function() {
$('.test').test({
background: 'red',
height: 400
});
});
The method that I'm using in the jsfiddle bloats the code so much, even with just 2 different options that are also using data.
Question is: How could I achieve same end result with less code, to determine wether or not data should be used?
Here is the part of the code from the jsfiddle, that determines wether or not to use data.
// objD is obj.data();
// background
if ( !objD.background) {
var cBG = o.background;
}
else {
var cBG = objD.background;
}
// Opacity
if ( !objD.height) {
var cH = o.height;
}
else {
var cH = objD.height;
}
obj.css({
background: cBG,
height: cH
});