我想要做的就是像往常一樣將選項設置爲插件,但也要用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