jQuery ====== Bibliothek für JavaScript zur Vereinfachung (nutzt selbst JavaScript). Mittlerweile durch Aufgreifen in ES6 immer weniger im Einsatz. Der Einsatz von jQuery schafft viele Möglichkeiten, geht aber zu Lasten der Performance. Es muss stets die gesamte Library geladen werden, obwohl meistens nur kleine Teile der Bibliothek verwendet werden. Es konnte sogar fertige Programme (Plugins) in ein JavaScript eingefügt werden. Möglichkeit, diese ohne viel Aufwand einzusetzen. Es gab jedoch Inkompatibilitäten, wenn mehrere Plugins gleichzeitig verwendet wurden. jQuery besteht rein aus Funktionen welche Objekte zurückgeben. Die Aufrufe lassen sich verketten. ``*.min.js`` ist eine minimierte Version der Bibliothek, die vom Browser schneller zu Laden ist. jQuery arbeitet im **strikten Modus**, ``"use strict"`` muss also beim Einsatz also nicht mehr selbst angegeben werden (gilt global). jQuery ist **abwärtskompatibel**, man versucht also auch ältere JavaScript Versionen zu unterstützen (man sieht daher oft ältere Syntax z.B. ``var`` im Code). Integration von jQuery in HTML: .. code-block:: html
jQuery sollte **nicht** innerhalb des ```` geladen werden, sondern stets im ````. .. important:: jQuery sollte stets auf dem eigenen Server liegen und nicht von einem externen Server geladen werden. Generell sollten alle externen Bibliotheken stets auf dem eigenen Server bereitgestellt werden, damit keine Zugriffe auf Bibliotheksseiten und Verletzung des Datenschutzes passieren (oder, falls dies nicht möglich ist, sollte der Nutzer zuerst um Erlaubnis gefragt werden). Selektoren ---------- * ``$()`` * ``jQuery()`` Beide arbeiten gleich, jedoch ist das ``$`` häufig von anderen Frameworks bereits in Verwendung und erzeugt einen Konflikt bei dem Versuch der Mehrfachverwendung. Der **konfliktlose Modus** ermöglicht über .. code-block:: javascript jQuery.noConflict(); dass das Dollarzeichen **nicht** mehr eingesetzt werden kann. Aufruf von jQuery Funktionen ---------------------------- Wird jQuery eingesetzt, muss sich der JS-Code innerhalb einer jQuery Funktion befinden. **Alter Weg** (vor HTML 5): einleitender Handler, der darauf wartet, dass DOM fertig geladen .. code-block:: javascript $(document).ready(function() { jQuery-Statements }); **Neuer Weg:** .. code-block:: javascript jQuery( function() {} ); Beispiel (über ``$()``): .. code-block:: javascript $( function() { console.log($("#url_llink")); console.log(document.querySelector("#url_link")); }) Elemente werden in einem "jQuery"-Objekt zurückgegeben. Auf HTML-Attribute zugreifen ---------------------------- Über ``[elem].attr()`` lässt sich auf ein Attribut eines HTML Elements zugreifen. .. hint:: Der Rückgabewert eines Queries ist ein Object, welcher potentiell mehrere dem Query zutreffende HTML Elemente enthalten könnte. Die selektierten Elementen befinden mit nummerierten String Keys in ("0", "1", ... - das erste Match hat die "0"). Beim Zugriff über ``[0]`` wird die Zahl in einen String implizit umgewandelt und auf das Element zugegriffen. .. code-block:: javascript console.log($("#url_llink")); // das Objekt wird zurückgegeben console.log(document.querySelector("#url_link")); console.log($("#url_link")[0] == document.querySelector("#url_link")); // true console.log($("#url_link")[0]); .. code-block:: javascript // auf HTML-Attribute zugreifen let link = $("#url_link"); console.log(link.attr("title")); // Attribut ausgeben console.log(link.attr("title", "Ab jetzt mit jQuery")); // Attribut setzen console.log(link.attr("title")); // mehrere Attribute gleichzeitig verändern link.attr({ title: "jQuery", href: "https:/jquery.com" }); Über ``[elem].removeAttr()`` wird ein Attribut entfernt: .. code-block:: javascript // Attribute entfernen console.log(link.removeAttr("title")); // Selektion wird im Objekt zurückgegeben console.log(link.attr("title")); // undefined Über ``[elem].html()`` wird auf den HTML-Inhalt (inkl. Markups) eines Elements zugegriffen: .. code-block:: javascript // Zugriff auf Content let contentH1 = $("h2").html(); console.log(contentH1); // "Inhaltsverzeichnis" // lesend wird NUR Content des 1. selektierten Elements zurückgegeben // es hat sich erwiesen das mehr i.d.R. nicht gebraucht wird let contentP = $("p").html(); console.log(contentP); // "Hey" // Beim Schreiben werden ALLE selektierten Elemente überschrieben $("h1").html(contentP); // --> Hey $("p").html(contentP); // alle p-Elemente --> Hey .. important:: Die **jQuery-Methoden sind auf Ebene des Objekts**, nicht auf den Elementen innerhalb des Objekts. Sind mehrere Elemente im Objekt, werden diese in jQuery in einer Schleife durchlaufen --> es bedarf keiner Schleife in JavaScript um z.B. alle Elemente zu überschreiben. Über ``[elem].text()`` wird auf den HTML-Text (ohne Markups) eines Elements zugegriffen: .. code-block:: javascript // Content ohne Markups // lesend werden ALLE selektierten Elements zurückgegeben (im Gegensatz zu .html()) $("p").first().text("Content ohne Markups<(p>"); console.log($("p").text()); // "Content ohne MarkupsHeyHeyHeyHeyHey"
// ebenso schreibend!
Selektion eingrenzen
--------------------
.. hint::
**Ältere jQuery-Versionen**
.. code-block:: none
:first 1. Element
:last letztes Element
:even alle Elemente an geraden index-Positionen
:odd alle Element an ungerade index-Positionen
:eq(index) Element an übergebener index-Position
:lt(index) Elemente mit niedrigeren als übergebener index-Position
:gt(index) Elemente mit höherer als übergebener index-Position
:nth-of-type(position) Element an Position index + 1
Über ``$(" Elemente zurück (hebt first() Selektion auf
console.log($("p").first().end().is($("p"))); // true
// Kann auch verkettet werden
$("p").first().end().last(); // gibt letztes Elemente zurück
.. hint::
Die ``[match_result].is(selector)`` Methode vergleicht die Elemente von *match_result*
zu denen eines *selector*.
Über ``[object].has(selector)`` werden nur die Elemente einer Selektion zurückgegeben,
welche einem weiteren Selektor entsprechen:
.. code-block:: javascript
$("li").has("#"); // gibt li-Elemente zurück, welche ul-Kinder haben
Über ``[object].filter(selector)`` lassen sich die Elemente im Objekt filtern:
.. code-block:: javascript
$("li").filter(".firstElement");
Über ``[elem].not(selector)`` lassen sich Elemente filtern, welche das Kriterium
**nicht** erfüllen:
.. code-block:: javascript
$("li").not(".firstElement");
Über ``[elem].slice(startIndex, endIndex)`` wird ein Objekt zurückgegeben welches
nur ein Teil der ursprünglichen Menge an Elementen hat. Der ``endIndex`` ist
in der Rückgabe **nicht** enthalten:
.. code-block:: javascript
$("p").slice(1,4);
Elemente oder DOM-Strings im DOM integrieren
--------------------------------------------
Über ``[object]. before Text prepend Text append Text after Text