Was ich tun möchte ist, Optionen wie üblich in Plugin zu setzen, aber diese Optionen auch mit html5-Datenattributen zu überschreiben.Wie man jQuery-Plugin-Optionen mit html5-Datenattributen überschreibt
Here I have exactly that (jsfiddle), aber es gibt ein kleines Problem damit.
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
});
});
Die Methode, die ich in der jsfiddle mit bläht den Code so viel, auch mit nur zwei verschiedenen Optionen, die auch Daten verwenden.
Frage ist: Wie könnte ich das gleiche Endergebnis mit weniger Code erreichen, um zu bestimmen, ob oder nicht Daten verwendet werden sollten?
Hier ist der Teil des Codes aus dem jsfiddle, die ob bestimmt oder nicht Daten zu verwenden.
// 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
});
Einfacher als das, was ich getan habe, aber ich bin ein bisschen besorgt, wie wenn ich den Wert '0' in' Daten-'setzen würde, scheint es direkt auf' Optionen' zu springen. Dasselbe passiert, wenn Daten "falsch" sind, es springt direkt zu "Optionen". Was bedeutet, dass ich mit diesen Werten nicht überschreiben kann. – Joonas
Wenn Sie 'objD.background' auf Null setzen, dann hätte'! ObjD.background' den Wert 'true' und Sie erhalten das gleiche Ergebnis. Aber ich werde meine Antwort aktualisieren, um das zu beantworten. – Blazemonger
Ich sehe .. Ich habe 'if (objD.cBG! = Null) {Optionen} else {data}' verwendet, dachte aber, dass die Verwendung von '!' Ein bisschen kürzer war, also bin ich dazu gesprungen ohne viel darüber nachzudenken:) – Joonas