{"id":501,"date":"2011-10-11T15:58:06","date_gmt":"2011-10-11T13:58:06","guid":{"rendered":"http:\/\/www.capri-soft.de\/blog\/?p=501"},"modified":"2018-03-05T16:29:33","modified_gmt":"2018-03-05T15:29:33","slug":"htmlcss-ein-kleines-jquery-tutorial","status":"publish","type":"post","link":"https:\/\/www.capri-soft.de\/blog\/?p=501","title":{"rendered":"HTML\/CSS: Ein kompaktes JQuery-Tutorial"},"content":{"rendered":"<h1>Intention<\/h1>\n<h3>Pers\u00f6nliche Intention<\/h3>\n<p>Meine Intention ist es ein kompaktes JQuery-Tutorial zu ver\u00f6ffentlichen, welches (nach diesem Abschnitt) ein \u00dcberblick \u00fcber die wichtigsten JQuery-Funktionen gibt.<\/p>\n<h3>Warum JQuery?<\/h3>\n<p>JQuery ist eine Javascript-Klassenbibliothek, welche zahlreiche Funktionen f\u00fcr die Selektion im HTML-Baum (DOM) und dessen Manipulation (HTML-Manipulation wie z.B. das Austauschen von TABLE-Tags oder dem dynamischen Hinzuf\u00fcgen von TR-Tags&#8230;) enth\u00e4lt.<\/p>\n<p>Es bietet Funktionen f\u00fcr&#8230;<\/p>\n<ul>\n<li>Elementselektion im Document Object Model \u00fcber die Sizzle Selector Engine, die weitgehend den XPATH\/CSS-3-Selektoren entspricht<\/li>\n<li>Document Object Model-Manipulation (HTML-Dokumente dynamisch \u00e4ndern)<\/li>\n<li>Erweitertes Event-System<\/li>\n<li>Hilfsfunktionen<\/li>\n<li>Effekte und Animationen (einblenden, ausblenden, aufklappen, zuklappen&#8230;)<\/li>\n<li>Ajax-Funktionalit\u00e4ten (POST\/GET, JSON&#8230;)<\/li>\n<li>Zahlreiche frei verf\u00fcgbare Plug-ins<\/li>\n<\/ul>\n<h3>Wer nutzt JQuery?<\/h3>\n<p>Vorwiegend Web-Entwickler, die auf einer etwas niedrigeren Ebene ein Javascript-Framework ben\u00f6tigen. JQuery ist kein High-Level-Framework mit WYSIWYG-Editor.<\/p>\n<p>Moderne AJAX\/DHTML-Webanwendungen nutzen immer h\u00e4ufiger High-Level-Frameworks wie GWT, <a href=\"http:\/\/weblogs.asp.net\/scottgu\/archive\/2008\/09\/28\/jquery-and-microsoft.aspx\">ASP.NET<\/a>, JSF usw&#8230;<br \/>\nDiese Frameworks bieten UI-Komponenten (z.B. Kalender, Tabellen mit DB-Anbindung, B\u00e4ume&#8230;) an, die herk\u00f6mmlichen HTML-Seiten durch simples &#8222;Draufziehen&#8220; (in einem WYSIWYG-Editor) oder Instanzierung neuer Teile (z.B. in einem UI-Composite-Pattern) die F\u00e4higkeit verleiht sich durch Nutzerinteraktion (z.B. Mausklicks, Tastatureingaben&#8230;) zu ver\u00e4ndern, ohne die Seite komplett neu zu laden (AJAX\/DHTML).<br \/>\nHierbei findet im Hintergrund eine DOM-Manipulation statt (h\u00e4ufig per AJAX &#8211; hier werden z.B. asynchron Abschnitte aus der Datenbank nachgeladen). Der Browser zuckt dabei nicht\/Die Seite verschwindet bei einem Klick nicht kurz. Wenn man solche Komponenten selber entwickelt, ist JQuery eine ausgezeichnete Erweiterung zu herk\u00f6mmlichen Javascript-Funktionen.<br \/>\nMicrosoft hat in seiner IDE <a href=\"http:\/\/weblogs.asp.net\/scottgu\/archive\/2008\/09\/28\/jquery-and-microsoft.aspx\">Visual Studio JQuery integriert<\/a> und verwendet es bei der Entwicklung von Drag-And-Drop-UI-Komponenten. Aus diesem Grund ist ein Zugriff in Visual Studio auf die Funktionen m\u00f6glich.<\/p>\n<h1>Tutorial<\/h1>\n<h3>Zu Beginn&#8230;<\/h3>\n<p>Man ben\u00f6tigt 2 Dinge um mit JQuery zu beginnen<\/p>\n<ul>\n<li>Das Einbinden der Bibliothek (herunterladen oder wie hier googlecontent nutzen)<\/li>\n<li>Die READY-Funktion welche ein Ereignis ist, das sofort auftritt wenn das HTML-Dokument (oder das DOM) zur Manipulation bereit ist<\/li>\n<\/ul>\n<h3>&#8230;JQuery erm\u00f6glichen&#8230;<\/h3>\n<p>Hierf\u00fcr f\u00fcgen wir zwischen die HEAD-Tags des HTML-Dokuments die folgenden Skripte hinzu:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;script src=&quot;http:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.5\/jquery.min.js&quot;&gt;\/\/ &lt;!&#x5B;CDATA&#x5B;\r\n   \r\n\/\/ ]]&gt;&lt;\/script&gt;&lt;script type=&quot;text\/javascript&quot;&gt;\/\/ &lt;!&#x5B;CDATA&#x5B;\r\n                                         \r\n\t\/\/ Hier kommt die READY-Methode (s.u.) hin    \r\n    \r\n\/\/ ]]&gt;&lt;\/script&gt;Hello World<\/pre>\n<h3>&#8230; und die Ready-Methode implementieren<\/h3>\n<p><u>Hierf\u00fcr gibt es 3 M\u00f6glichkeiten<\/u><\/p>\n<p><em>1. Vollst\u00e4ndig:<\/em><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\njQuery(document).ready(function() {\r\n   \/\/ Code hier einf\u00fcgen\r\n})\r\n<\/pre>\n<p><em>2. Mit $ als Alias f\u00fcr die jQuery-Klasse<\/em><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n$(document).ready(function() {\r\n   \/\/ Code hier einf\u00fcgen\r\n})\r\n<\/pre>\n<p><em>3. Kurzform:<\/em><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n$(function() {\r\n   \/\/ Code hier einf\u00fcgen\r\n})\r\n<\/pre>\n<p>Die READY-Methode ist das erste Event, was auftreten kann. Das Ereignis tritt ein, wenn auf das DOM zugegriffen werden kann. Ein ALERT-Fenster in dieser Methode aufzurufen macht nicht viel Sinn, da es nicht notwendig ist auf das geladene DOM zugreifen zu m\u00fcssen. Dies k\u00f6nnte auch fr\u00fcher passieren.<\/p>\n<h3>Einschub: Was ist DOM?<\/h3>\n<p>Beim DOM handelt es sich um ein Modell, welches den Zugriff auf Elemente, Teilb\u00e4ume oder Teil-XML-Strukturen erlaubt. Grunds\u00e4tzlich sieht das DOM eine HTML-Dokumentes mit einer Tabelle folgenderma\u00dfen aus:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"508\" data-permalink=\"https:\/\/www.capri-soft.de\/blog\/?attachment_id=508\" data-orig-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2011\/10\/Zeichnung1.jpg?fit=454%2C241&amp;ssl=1\" data-orig-size=\"454,241\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Zeichnung1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2011\/10\/Zeichnung1.jpg?fit=454%2C241&amp;ssl=1\" class=\"alignnone size-full wp-image-508\" title=\"Zeichnung1\" src=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2011\/10\/Zeichnung1.jpg?resize=454%2C241&#038;ssl=1\" alt=\"\" width=\"454\" height=\"241\" srcset=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2011\/10\/Zeichnung1.jpg?w=454&amp;ssl=1 454w, https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2011\/10\/Zeichnung1.jpg?resize=300%2C159&amp;ssl=1 300w\" sizes=\"auto, (max-width: 454px) 100vw, 454px\" \/><\/p>\n<h3>Verwendung des Selektions-Teils f\u00fcr den DOM<\/h3>\n<p>Bei den Beispielen werde ich nur noch die Kurzform der READY-Methode nutzen.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n$(function() {\r\n   \/\/ W\u00e4hle alle &lt;a&gt;-Tags aus und definiere ein CLICK-Ereignis\r\n   $(&quot;a&quot;).click(function(event){\r\n       \/\/ wird bei jedem klick auf einen Link aufgerufen\r\n       alert('Hello JQuery!');\r\n\r\n       \/\/ verhindert das Aufrufen des in Link-Zieles\r\n       event.preventDefault();\r\n   });\r\n});\r\n&lt;\/a&gt;<\/pre>\n<p>Wer den obigen Code bereits versteht, hat auch das Selektions-Konzept von JQuery verstanden.<\/p>\n<p>Der erste Aufruf ist immer eine Selektion auf das DOM\/HTML-Dokument. Mit $(&#8222;a&#8220;) (alternativ auch jQuery(&#8222;a&#8220;) ) wurden alle <code><\/code>-Tags im gesamten HTML-Dokument ausgew\u00e4hlt. Das Anh\u00e4ngen von .click h\u00e4ngt dann an die Selektion (also alle Links, bzw. <code><\/code>-Tags) ein onClick-Ereignis, welches ein ALERT-Fenster \u00f6ffnet. Die Methode preventDefault() des Event-Objektes verhindert das Standardverhalten des Links, n\u00e4mlich den Aufruf der Seite. Somit k\u00f6nnte man f\u00fcr alle Links die Zielseite \u00e4ndern oder abfangen. Der Funktionsk\u00f6rper function() deklariert eine anonyme, namenlose Methode die ausgef\u00fchrt wird, wenn das onClick-Ereignis des Links (also des <code><\/code>-Tags) aufgerufen wird.<\/p>\n<p>Man kann grunds\u00e4tzlich alle <code><\/code>&#8211; oder XML-Tags eines &#8222;Baumes&#8220; (n\u00e4mlich dem DOM) selektieren.<\/p>\n<p>Doch was gibt es f\u00fcr M\u00f6glichkeiten der Selektion?<\/p>\n<p>Oberfl\u00e4chlich gesehen gibt es 2 M\u00f6glichkeiten&#8230;<\/p>\n<ol>\n<li>Kombination aus CSS und XPATH -&gt; $(&#8222;div &gt; ul a&#8220;)<\/li>\n<li>Nutzung verschiedener Methoden des JQuery-Objektes (z.B. $(&#8222;a&#8220;).each mit $(this) Referenz<\/li>\n<\/ol>\n<h3>Selektion &#8230;<\/h3>\n<dl>\n<dt>&#8230; auf eine TAG-ID<\/dt>\n<dd>$(&#8222;#eineDivID&#8220;).addClass(&#8222;red&#8220;);<\/p>\n<p>Die Raute # sagt der Selektion, das sie ein Attribut id=&#8220;..&#8220; suchen soll. Die Selektion beinhaltet dann das Element (z.B. ein DIV). Hier wird diesem DIV die CSS-Klasse .red zugewiesen.<\/p>\n<p>Beispiel: <code><br \/>\n<\/code><\/p>\n<div id=\"eineDivId\">Div-Inhalt<\/div>\n<\/dd>\n<dt>&#8230; auf alle Kind-Elemente <code>\u00a0<\/code> aller Tabellen eines Dokumentes<\/dt>\n<dd>$(&#8222;table &gt; tr &gt; td&#8220;).addClass(&#8222;blue&#8220;);Die Selektion w\u00e4hlt alle td-Tags aller Tabellen aus und f\u00fcgt diesen die CSS-Klasse .blue hinzu. F\u00fcr Kind-Elemente (Unter-Tags) wird das Ist-Gr\u00f6\u00dfer-Als-Zeichen &gt; verwendet.<\/p>\n<\/dd>\n<dt>&#8230; auf das letzte <code><br \/>\n<\/code>-Element aller Tabelle eines Dokumentes<\/dt>\n<dd>$(&#8222;table &gt; tr &gt; td:last&#8220;).hover(function(){$(this).addClass(&#8222;green&#8220;);},function(){$(this).removeClass(&#8222;green&#8220;);})<\/p>\n<p>Unter Verwendung vom HOVER-Event, welches 2 Parameter onMouseOver\/onMouseOut als &#8222;functions&#8220; \u00fcbergeben bekommt, wird ein Mouse-Over-Event auf alle letzten Zeilen aller Tabellen gelegt. F\u00e4hrt man mit der Maus dr\u00fcber nimmt dieses die Farben\/Styles an, die in der CSS-Klasse .green definiert wurden. Ist die Maus wieder au\u00dferhalb der Zeile wird die Klasse entfernt.<\/p>\n<\/dd>\n<dt>&#8230; auf alle&nbsp;<\/p>\n<p>-Tags, die ein Class-Attribut haben<\/dt>\n<dd>$(&#8222;p[@class]&#8220;).hide()<\/p>\n<p>Selektiert alle p-Tags im Dokument, die ein Attribut f\u00fcr eine CSS-Klasse vorgegeben haben class=&#8220;&#8230;&#8220; und versteckt diese.<\/p>\n<\/dd>\n<dt>&#8230; auf den ersten&nbsp;<\/p>\n<p>-Tag einer Seite<\/dt>\n<dd>$(&#8222;p:eq(0)&#8220;)&#8230;..<\/dd>\n<dt>&#8230; auf alle sichtbaren DIVs der Seite<\/dt>\n<dd>$(&#8222;div:visible&#8220;)&#8230;<\/dd>\n<dt>&#8230; auf alle <code><\/code>-Tags die unter einem <code><\/code>-Tag sind<\/dt>\n<dd>$(&#8222;ul &gt; li&#8220;)&#8230;. alternativ auch $(&#8222;ul\/li&#8220;)<\/dd>\n<dt>&#8230; auf alle&nbsp;<\/p>\n<p>-Tags mit einer CSS-Klasse &#8222;foo&#8220;, die einen Link haben<\/dt>\n<dd>$(&#8222;p.foo[a]&#8220;)&#8230;<\/dd>\n<dt>&#8230; auf alle <code><\/code>-Tags mit einem Link mit dem Text &#8222;Register&#8220;<\/dt>\n<dd>$(&#8222;li[a:contains(&#8218;Register&#8216;)]&#8220;)&#8230;<\/dd>\n<dt>&#8230; auf alle <code><input type=\"text\" \/><\/code>-Tags mit dem Name &#8222;bar&#8220;<\/dt>\n<dd>$(&#8222;input[@name=bar]&#8220;)&#8230;..<\/dd>\n<dt>&#8230; auf alle angehakten\/gecheckten Radio-Buttons<\/dt>\n<dd>$(&#8222;input[@type=radio][@checked]&#8220;)&#8230;.<\/dd>\n<\/dl>\n<h3>CSS Selektoren<\/h3>\n<p>Selektionen nach Stylesheet folgen der Syntax<\/p>\n<p><code>E:STYLE<\/code><\/p>\n<p>wobei E ein HTML-Element\/HTML-Tag bezeichnet.<\/p>\n<dl>\n<dt>&#8230; auf ein&nbsp;<\/p>\n<p>-Element als einziges Kind-Element seines Eltern-Tags<\/dt>\n<dd>$(&#8222;p:only-child&#8220;) &#8230;<\/dd>\n<dt>&#8230; auf ein&nbsp;<\/p>\n<p>-Tag als letztes Kind-Element seines Eltern-Elements<\/dt>\n<dd>$(&#8222;p:last-child&#8220;) &#8230;<\/dd>\n<\/dl>\n<h3>Mit regul\u00e4ren Vergleichsoperatoren&#8230;<\/h3>\n<p>&#8230; z.B. bei der Suche nach Attributen<\/p>\n<dl>\n<dt>&#8230; auf alle <code><\/code>-Tags, in deren href-Attribut der String \/content\/gallery vorkommt<\/dt>\n<dd>$(&#8222;a[href*=&#8217;\/content\/gallery&#8216;]&#8220;)&#8230;<\/dd>\n<dt>&#8230; auf alle&nbsp;<\/p>\n<p>-Tags dessen Attribut &#8222;foo&#8220; mit &#8222;bar&#8220; beginnt<\/dt>\n<dd>$(&#8222;p[@foo^=bar]&#8220;)<\/dd>\n<dt>&#8230; auf alle&nbsp;<\/p>\n<p>-Tags dessen Attribut &#8222;foo&#8220; mit &#8222;bar&#8220; endet<\/dt>\n<dd>$(&#8222;p[@foo$=bar]&#8220;)<\/dd>\n<\/dl>\n<p>&#8230; will be continued (Fortsetzung folgt&#8230;)<\/p>\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fwww.capri-soft.de%2Fblog%2F%3Fp%3D501&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" style=\"border:none; overflow:hidden; width:450px;margin-top:5px;\"><\/iframe>","protected":false},"excerpt":{"rendered":"<p>Intention Pers\u00f6nliche Intention Meine Intention ist es ein kompaktes JQuery-Tutorial zu ver\u00f6ffentlichen, welches (nach diesem Abschnitt) ein \u00dcberblick \u00fcber die wichtigsten JQuery-Funktionen gibt. Warum JQuery? JQuery ist eine Javascript-Klassenbibliothek, welche zahlreiche Funktionen f\u00fcr die Selektion im HTML-Baum (DOM) und dessen Manipulation (HTML-Manipulation wie z.B. das Austauschen von TABLE-Tags oder dem dynamischen Hinzuf\u00fcgen von TR-Tags&#8230;) enth\u00e4lt. &hellip; <a href=\"https:\/\/www.capri-soft.de\/blog\/?p=501\" class=\"more-link\"><span class=\"screen-reader-text\">HTML\/CSS: Ein kompaktes JQuery-Tutorial<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[14,30],"tags":[],"class_list":["post-501","post","type-post","status-publish","format-standard","hentry","category-htmlcss","category-javascript"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4yGeN-85","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=501"}],"version-history":[{"count":17,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/501\/revisions"}],"predecessor-version":[{"id":2640,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/501\/revisions\/2640"}],"wp:attachment":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}