JQuery ist das wohl bekannteste Javascript Framework, das sehr viele grundlegende Funktionen zur Verfügung stellt. Damit wird die Arbeit mit Javascript deutlich erleichtert.
{a: 1, b: 2}
Erklärung: Ein JSON-Objekt mit zwei Feldern (Key-Value-Paaren), nämlich Key "a" und zugehöriger Value "1" sowie Key "b" und Value "2".
Die Funktion $.extend fügt zwei JSON-Objekte zusammen zu einen:
$.extend({a: 1, b: 2}, {b: 3, c: 4});
Erklärung: Das Ergebnis lautet {a: 1, b: 3, c: 4}, weil bei gleichen Keys der Key-Value-Paare der Value des zweiten JSON-Objekts verwendet wird.
$.extend({ test: function() { console.log("Hallo"); return this; } });
Erklärung: Diese Extension fügt JQuery die Funktion "test" hinzu. Diese kann, genauso wie alle andere JQuery-Funktionen, über $.test() aufgerufen werden. JQuery-Funktionen geben üblicherweise this zurück, sodass man die Aufrufe verketten kann.
Nehmen wir folgenden HTML-Code an:
<div id="element"/>
So können wir mit JQuery das Element wrappen:
$("#element")
Erklärung: Hier wird ein Element über einen CSS-Selektor als Daten verwendet. Es sind aber auch noch eine Vielzahl weiterer Daten, von HTML-Elementen, über XML bis zu Objekten kapselbar. Vor allem können es mehrere Elemente sein, die durch eine JQuery-Function gewrappt werden.
Die Elemente können jederzeit ausgepackt werden, indem der Array-Index-Operator eingesetzt wird:
$("#element")[0]
Aber es können auch Funktionen darauf angewendet werden, von denen eine ganze Reihe bereits definiert ist:
$("#element").attr("id")
Erklärung: Die Funktion "attr" liefert den Wert eines Attributs, hier also "element".
Solche Funktionen können aber auch selbst definiert werden:
$.fn.extends({ test: function() { console.log("got: ", this.attr("id")); return this; } }); $("#element").test();
Erklärung: Hier wird die Funktion "test" definiert und dann auf das selektierte Element angewendet.
Hinweis: Auch die Daten-Funktionen $.fn geben this zurück, falls diese keinen expliziten Rückgabewert liefern. Damit ist eine Verkettung von Funktionsaufrufen möglich.
Ein Widget kann leicht über die Funktion $.widget erzeugt werden:
$.widget("ext.Test", {});
Erklärung: Das Widget ist zunächst über "$.ext.Test" auffindbar.
Üblicherweise wird ein Widget dann auf ein HTML-Element aufgesetzt:
var widget = $("#element").Test();
Damit wird das HTML-Element zum Widget namens "Test" erweitert und der Variable "widget" zugeordnet.
$.widget("ext.Test", { _init: function() { console.log("init"); } });
Erklärung: Nach dem das Widget auf das HTML-Element mittels $("#element").Test() installiert wurde, wird automatisch der Code der Funktion _init ausgeführt.
$.widget("ext.Test", $.ui.datepicker, {});
Im Folgenden wird von einem Widget mit folgenden Code ausgegangen:
$.widget("ext.Test", { options: { value: "default" }, _create: function() { this._super(); console.log("constructor: " + JSON.stringify(this.options); }, _setOptions: function(options) { this._super(options); console.log("changed: " + JSON.stringify(this.options)); }, test: function(value) { return "Hello " + value; } });
<div id="test"> <script type="text/javascript"> $("#test").Test(); </script>
Ergebnis: Die Ausgabe für die Option value ist default.
Der Constructor kann auch Parameter annehmen:
$("#test").Test({value: "constructor-param"});
Ergebnis: Die Ausgabe für die Option value ist constructor-param.
$("#test").Test({value: "changed-param"});
Ergebnis: Die Ausgabe für die Option value ist changed-param.
$("#test").Test("test");
Ergebnis: Die Funktion test wird aufgerufen.
$("#test").Test("test", "Peter");
Ergebnis: Die Funktion test wird mit dem Argument Peter aufgerufen.
Hinweis: Es können beliebig viele weitere Argumente übergeben werden.
Auf diese Weise lässt sich eine Art Kombination aus Setter und Getter implementieren, wenn man das Argument auf undefined abfragt.