我想要做的就是像往常一样将选项设置为插件,但也要用html5数据属性覆盖这些选项。如何用html5数据属性覆盖jquery插件选项
Here I have exactly that (jsfiddle),但有一个小问题。
的jsfiddle代码:
(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
});
});
的方法,我使用的的jsfiddle涨大码了这么多,即使与同样使用的数据只是2个不同的选项。
问题是:我怎样才能达到相同的最终结果与较少的代码,以确定是否应该使用的数据?
下面是从的jsfiddle的代码,确定阉羊或不使用的数据的一部分。
// 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
});
比我做得更简单,但我有点担心如果我将数值'0'设置为'data-',它似乎直接跳到'options'。同样的事情发生,如果数据有'假',它直接跳转到'选项'。这意味着我无法用这些值覆盖。 – Joonas 2012-03-30 18:27:43
如果您将'objD.background'设置为零,那么'!objD.background'会评估为true,您会得到相同的结果。但我会更新我的答案来解决这个问题。 – Blazemonger 2012-03-30 18:29:19
我看到..我曾经使用过'if(objD.cBG!= null){options} else {data}',但是以为使用'!'有点短,所以我不加思索地跳到这一点: ) – Joonas 2012-03-30 18:33:14