jQuery Tutorial

Ich schreibe ein kleines jQuery Tutorial mit einigen Beispielen.

Demo 1 Alert Box

Als erstes registrieren wir ein so genanntes „ready Event“ für das Document. Dieses geht in jQuery mit der Funktion $(document).ready(function()). Im Code sieht das folgendermaßen aus:

$(document).ready(function() {
    //Mach irgendetwas wenn das Dokument geladen ist.
});

Wir wollen nun, das wenn man auf einen Link klickt, eine Messagebox erscheint, mit dem Inhalt Hallo Welt. Dazu schreiben wir folgendes in die Funktion:

$(document).ready(function(){
    $("a").click(function(){
        alert("Hallo Welt");
    });
});


Der komplette HTML Code sieht jetzt folgendermaßen aus:

Demo 1 Alert Box – Anzeigebeispiel: So sieht’s aus

<html>
    <head>
        <!--jQuery Framework laden (evtl. Pfad anpassen)-->
        <script src="jquery.js" type="text/javascript"></script>

        <!--Code für Demo 1-->
        <script type="text/javascript">
        $(document).ready(function(){
            $("a").click(function(){
                alert("Hallo Welt");
            });
        });
        </script>
    </head>

    <body>
        <!--Zwei Test Links-->
        <p><a href="#">Ein Link</a></p>
        <p><a href="#">Ein weiterer Link</a></p>
    </body>
</html>

Nun schauen wir mal was wir gemacht haben. $(„a“) ist ein jQuery Selector. Mit $(„element“) können verschieden Sachen selektiert werden, auch Klassen $(‚.klasseDesElements‘) oder IDs $(‚#idDesElements‘). Es kann aber auch kombiniert werden, um z.B. alle Divs mit der Klasse development zu selektieren $(‚div.development‘).

[ad#adsense]

In unserem Fall werden alle a Element in dem Dokument selektiert. click() fügt allen ausgewählten Elementen ein Klick Event hinzu. In unseren Fall wird eine ganz normale Javascript Funktion aufgerufen, nämlich alert(„Hallo Welt“);. Nun was passiert jetzt bei dieser Funkion? Alle a-Elemente führen beim klicken darauf, eine Messagebox aus in der steht Hallo Welt. Also genau das was wir wollten.

Demo 2 CSS Klassen

Eine andere Aufgabe von jQuery ist das hinzufügen und entfernen von CSS-Klassen. Zuerst erstellen wir mithilfe von CSS eine Klasse mit dem Namen test. Wir nehmen in diesem Fall mal eine fette und kursive Schriftart

a.test {
    font-weight: bold;
    font-style: italic;
}

Als nächstes kommen wir zum Javascriptteil. Sobald nun also das Dokument geladen ist, soll nun allen Links die Klasse test hinzugefügt werden. Dazu nehmen wir die zuvor gelernte Funktion $(document).ready(function()) mit der wir nun abfragen, wann die Seite fertig geladen ist. Mit $(„a“) selektieren wir nun alle a-Elemente und fügen mit der Funktion addClass() eine Klasse hinzu, in unseren Fall ist das die Klasse test.

$(document).ready(function(){
    $("a").addClass("test");
});

Nun noch ein paar Links zum Testen hinzufügen, schon werden wir sehen was passiert.

Demo 2 CSS Klassen – Anzeigebeispiel: So sieht’s aus

<html>
    <head>
        <!--jQuery Framework laden (evtl. Pfad anpassen)-->
        <script src="jquery.js" type="text/javascript"></script>

        <!--CSS Klasse "test" macht fett und kursiv -->
         <style type="text/css">
            a.test {font-weight: bold; font-style:italic;}
         </style>

        <!--Code für Demo 2-->
        <script type="text/javascript">
        $(document).ready(function(){
            $("a").addClass("test");
        });
        </script>
    </head>

    <body>
        <!--HTML Links ohne der "test" Klasse-->
        <p><a href="#">Ein Link</a></p>
        <p><a href="#">Ein weiterer Link</a></p>
    </body>
</html>

Wenn wir nun uns die Seite ansehen werden wir feststellen das alle Links fett und kursiv dargestellt werden. Die HTML Links haben also die Klasse test jetzt.

[ad#adsense]

jQuery besitzt einige Spezial Effekte, von denen wir nun auch Gebrauch machen wollen. Sie lassen die eigene Website mit wenig Aufwand schön für den Besucher aussehen.

Als aller erstes nehmen wir eine ganz normale Div Box, mit etwas Text drin:

<div style="background-color:#336699;color:#fff;">
    Ich bin eine Testbox und muss immer viel arbeiten 🙂
</div>

Damit wir die Box besser sehen, habe ich per Style Attribut, die Hintergrund Farbe auf Blau und die Schrift Farbe auf weiß gesetzt.

Nun fügen wir noch einen Link hinzu, der etwas machen soll:

<a href="#" id="klein">Mach die Box klein (80 x 120px)</a>

Ich gebe diesen Link die ID klein, sodass wir später mit jQuery diesen Link selektieren können.

Als nächstes fügen wir noch etwas javascript hinzu, sodass der Link auch etwas macht wenn man drauf klickt:

$(document).ready(function(){
    /*Box klein machen*/
	$('a#klein').click(function(){
		$('div').animate({ height: 80, width: 120 }, "slow", function(){});
	})
});

Wir selektieren mit $(‚a#klein‘) unseren zuvor erstellten Link und geben ihn das Event click, wie schon zuvor erklärt wird bei einem Klick auf das Element nun der javascript Code in den Klammer ausgeführt.

[ad#adsense]

Als nächstes bestimmen wir welches Objekt verändert werden soll ($(‚div‘)), in diesen Fall sind das alle div Elemente. Mit der Funktion animate können wir Objekte animieren. Animate besitzt verschiedene Eigenschaften, in unseren Beispiel sagen wir height die Höhe auf 80px und width die Breite auf 120px, den Effekt wollen wir nun langsam haben, also hängen wir noch ein slow an.

Demo 3 Spezial Effekte – Anzeigebeispiel: So sieht’s aus

<html>
    <head>
        <!--jQuery Framework laden-->
        <script src="jquery.js" type="text/javascript"></script>

        <!--Code für Demo 3-->
        <script type="text/javascript">
        $(document).ready(function(){
            /*Box klein machen*/
            $('a#klein').click(function(){
                $('div').animate({ height: 80, width: 120 }, "slow", function(){});
            })
            /*Die Box große machen*/
            $('a#gross').click(function(){
                $('div').animate({ height: 200, width: 800 }, "slow", function(){});
            })
            /*Mehrer Effekte bestimmen*/
            $("a#slideFade").toggle(function(){
                $("div").animate({ height: 'hide', opacity: 'hide' }, 'slow');
            },function(){
                $("div").animate({ height: 'show', opacity: 'show' }, 'slow');
            })
        });
        </script>
    </head>

    <body>
        <div style="background-color:#336699;color:#fff;">Ich bin eine Testbox und muss immer viel arbeiten :-)</div>

        <p><a href="#" id="klein">Mach die Box klein (80 x 120px)</a></p>
        <p><a href="#" id="gross">Mach die Box Groß (200 x 800px)</a></p>
        <p><a href="#" id="slideFade">Dieser Link führt zwei Unteschiedliche Funktionen aus</a></p>
    </body>
</html>

Ich habe noch zwei weitere Links hinzugefügt und genau wie eben noch ein paar Effekte hinzugefügt. Einzige Besonderheit ist bei Link Nummer 3. Er führt beim zweiten Klick eine andere Funktion aus, als beim ersten. Beim ersten Klick lässt er die Box verschwinden und beim zweiten Klick wieder erscheinen. Dafür habe ich die Funktion toggle benutzt. An ihr kann man beliebig viele Funktionen an Reihen, die der Reihe nach abgearbeitet werden und dann wieder von vorne beginnt. Per animate und der height und opacity und der Eigenschaft hide bzw. show kann man die Box verschwinden und wieder erscheinen lassen.

Am besten man guckt sich mal die Beispiel Seite an und probiert es selber einmal.

Wer noch weiter probieren will, sollte sich mal jQuery UI ansehen, hier zu auch ein kleines Tutorial.

Englische Übersetzung von Pathin – http://www.pathin.org/tutorials/jquery-tutorial/

55 thoughts on “jQuery Tutorial

  1. In diesem Context tritt eine Verwechslung auf:

    „…auch Klassen $(’#klasseDesElements’) oder IDs $(’.idDesElements’). Es kann aber auch kombiniert werden, um z.B. alle Divs mit der Klasse development zu selektieren $(’div#development’). “

    eine Klasse hat einen Punkt.
    eine ID hat eine Raute.

    lga

  2. Oh, hast wohl das Buch von Daniel Mies, „Webseiten erstellen für Einsteiger“, gelesen. Deine Beispiele sind nämlich genau von dort abgeschrieben.

  3. Nein Buch habe ich leider noch gar nicht gelesen, ich kannte es bis jetzt noch gar nicht. Dieses Tutorial ist enstanden aus mehreren anderen, meist Englisch sprachigen Tutorials, wo die Beispiele herstammen kann ich gar nicht mehr genau sagen.

  4. Ich hab mal eine Frage: Ich habe einen etwas speziellen Anwendungsfall für jQuery. Und zwar habe ich auf einer Seite mehrere Musikalben mit einer Liste der jeweiligen Titel. Jetzt wollte ich eine Bibliothek wie jQuery benutzen, um die Songtexte zu den Songs einblenden zu lassen, indem man auf den Titel (oder einen speziellen Link jeweils daneben) klickt.
    So wie es jetzt aussieht, müsste ich allerdings für jeden Titel eine eigene jQuery-Funktion erstellen. Das wäre aber ziemlich viel Kopiererei und extrem unübersichtlich. Kann man eine Funktion irgendwie flexibel gestalten, dass automatisch der richtige DIV-Container ein-/ausgeblendet wird, je nachdem, welchen Link man klickt?

    Eine Antwort kann auch gerne an andy at linnert punkt de gesendet werden, falls es hier im Kommentar zu unpraktisch sein sollte.

    Vielen Dank für jede Hilfe.
    Gruß, Andreas

  5. Nochmal wegen der Sache mit den Songtexten. Das Problem hat sich erledigt. Ich habe das mit $(this).next() gelöst.
    Eine offene Frage bleibt jetzt aber noch. Und zwar, wie man den Anfangsstatus der DIVs, die man togglen kann, auf ‚versteckt‘ stellt. Aber ich suche morgen nach einer Lösung…

    Nochmals schöne Grüße,
    Andreas

  6. Nicht so schlimm. Habs mit display:none; erfolgreich gelöst. Ich frag mich im Moment nur, warum die Animation der Anweisung toggle() im Firefox so extrem ruckelt. Bei allen anderen Browsern gehts einwandfrei. Und ich hab eine Quadcore CPU… Ist das normal?
    Ist außerdem was dazu bekannt, dass manche Browser die Änderung der Schriftfarbe per css(„color“: „#xxxxxx“) nicht unterstützen? Das funktioniert bei mir auch nicht immer… =/

  7. Ah, super. Danke für den Hinweis mit dem Plugin. Werd es bei Gelegenheit mal ausprobieren.

    http://jgrassman.linnertmedia.de/musik das ist die Seite mit den Animationen (wenn du auf die Titel des obersten Albums klickst). Ich finde die Animationen dort mit dem FF sehr langsam. Sind die da bei dir auch so?

  8. Leicht ruckelig, gerade mal mit IE, FF und Chrome getestet. Der Chrome hat scheinbar die schnellste Javascript Engine dort ruckelt es kaum. Firefox und Internet Explorer sind ungefähr gleich auf. Etwas langsamer als der der Chrome.

    Aber ich finde es so vollkommen in Ordnung und mich stört es auch nicht ich kenne keine Seiten bei denen das bei längeren Texten mit dem Scroll Effekt nicht so ist.

  9. Achso, verstehe. Aber komisch, bei mir war der IE wesentlich schneller als der FF. Aber gut, kann man jetzt nicht viel machen. Aber danke fürs testen =)

  10. Hallo,

    danke für das Tutorial. Habe mal versucht den Effekt mit der auf- und zuklappbaren Box umzusetzen und habe nun ein kleines Problem:

    Und zwar soll die Box zu Anfang versteckt sein, also erst mit einem Klick auf den Link erscheinen.

    Wenn ich nun die Box auf display:none stelle dann geht die Box erst beim zweiten Klick auf und danach wie gewünscht, was muss ich nun machen, dass dies gleich beim ersten Klick passiert?

    Danke für Antworten!

    FG Lars

  11. Uiii,… das ging ja schnell und jetzt geht es so wie ich es wollte.

    Danke Danza!

    (Und wenn man die Antwort weiß, hätte man auch selber draufkommen können 😉 )

    Lars

  12. Da steckt ein kleiner Fehler drin.
    Klassen werden nicht mit einer Raute (#), sondern mit einem Punkt (.) selektiert.

    Mit der Raute (#) selektiert man IDs!

  13. Das bleibt meine Sache wie ich das Handle, außerdem generiert das jede Menge Traffic was dir ja wohl klar ist und dadurch ärgert es dich wahrscheinlich 😉

  14. The very root of your writing while appearing reasonable initially, did not really sit perfectly with me personally after some time. Someplace within the paragraphs you actually were able to make me a believer but only for a very short while. I still have a problem with your jumps in logic and you might do nicely to help fill in those breaks. If you actually can accomplish that, I would undoubtedly end up being fascinated.

  15. hi, sehr schönes und verständliches tutorial. habe gleich versucht, aus demo 3 die letzte animation/funktion anzuwenden, leider ohne erfolg (außerdem bin ich ein j(query)script grünschnabel und verstehe noch nicht alles so ganz). hier ist der code, falls es keine großen umstände macht, bin ich dankbar für den schubs in die richtige richtung (ohne funktion klappt es gut).

  16. Ich denke so ist es gemeint: http://d4nza.de/blog/dev/jquery/jquery/comments/java-overlay-test.html

    Was habe ich gemacht?

    Ich habe beim Javascript als aller erstes das Details Div versteckt mit: $(„.details“).hide();

    Dann habe ich die Toggle Funktion auf $(„a#slideFade“) alle a tags mit der ID slideFade gesetzt.

    Und danach auf alle Elemente von der Klasse details einmal den Show und einmal den Hide Effekt bei der Toggle Funktion bestimmt:
    $(„.details“).animate({ height: ’show‘, opacity: ’show‘ }, ’slow‘);

    $(„.details“).animate({ height: ‚hide‘, opacity: ‚hide‘ }, ’slow‘);

    Gruß
    Jannik

  17. hey yannik,
    du bist der BESTE!!! das mit .hide habe ich nicht gewusst, und bei „.details“ hatte ich den . ausgelassen… super dicken dank! genau so soll es funzen… dankedankedanke hast nen großen fan gewonnen 😉

  18. und zum schluß: ich würde gerne das ganze div beim onklick auf den „nein, danke button“ und auf das x oben rechts schließen. hast du dan einen tipp? danke schon mal im vorraus…

  19. hi yannik,
    gibt es eine möglichkeit, die button-, bzw. checkbox-elemente durch eingene zu ersetzten???

  20. hi yannik,
    ich suche nach einer möglichkeit, die checkbox-elemente durch eigene zu ersetzten. bisher habe ich keine brauchbaren tutorials/tipps im web gefunden… ich möchte anstelle der boxen z.b. ein fragezeichen vorstellen, welches sich dann in einen „abgehakt-haken“ verwandelt – nachdem mann den text-link angeklickt hat. ich lade die prototyp-elemante auf die testseite von gestern hoch. wäre doch mal eine idee für ein neues tutorial 🙂
    beste grüße und schönes wochenende, dinko

  21. Wie du schon festgestellt hast, wäre das so umfangreich das man ein eigenes Tutorial darüber schreiben könnte, deshalb kann ich dir nur nen groben Leitfaden geben.

    Du müsstest als erstes einmal das „ja ich will“ und das „nein ich will nicht“ Event abfangen mit .click auf dem entsprechenden Element. Dafür würde ich zwei Klassen machen: like, dislike.

    Dann müsste man bei like die checkbox setzen und bei dislike wieder entfernen.
    Um das zu machen hangelt man sich vom Link (der like oder dislike Klasse) mit (this) hoch zu dem Input Feld z.B.:
    $(this).parent().find(‚input‘)

    Danach kann man mit Hilfe von
    .attr(‚checked‘,’checked‘);
    die Checkbox setzen und mit
    .removeAttr();
    entfernen.

    Nun brauch man nur noch an der Stelle das like oder dislike Bild anzeigen (.show) lassen oder oder mit (.hide) verschwinden lassen.

    Alternativ könnte man nur ein img Tag verwenden und mit .attr(’source‘, ‚http://example.org/like.png‘) die Source des Bildes verändern.

    Zusammenfassung:
    Zwei Events like, dislike -> checkbox state ändern -> richtiges bild anzeigen

  22. Hallo,

    irgendwie funkrioniert bei mir die Toggle-Funktion aus Demo 3 nicht. Beim Laden der Seite (ready) verschwindet („toggelt“) die 3. Linkzeile selbst und ist dann natürlich nicht mehr anklickbar :(( Wenn ich bei document statt „ready“ die „click“-Eigenschaft setze, kann ich auch wieder nur den 3. Link ein- und ausblenden. Ich habe jquery 1.9.

    Ansonsten: tolles Tutorial, herzlichen Dank!

    Gruß
    Helmut

  23. hallo danza,

    habe die selben erfahrungen wie mein vorschreiber gemacht. dein tut ist für mich als jQuery einsteiger wirklich verständlich aufgebaut.

    bei demo 3 habe ich die selben probleme wie der user mit dem coment über mir.

    /*Mehrer Effekte bestimmen*/
    $(„a#slideFade“).toggle(function(){
    $(„div“).animate({ height: ‚hide‘, opacity: ‚hide‘ }, ’slow‘);
    },function(){
    $(„div“).animate({ height: ’show‘, opacity: ’show‘ }, ’slow‘);
    })

    wäre schön, wenn du dich dieser sache annehmen könntest.

    grat & lg
    Hari

  24. du Arschloch, was soll der Mist mit den übertrieben vielen keywords? Man landet hier, findet nichts und regt sich nur über dich Dummbeutel auf…
    Google sollte dich aus dem Index sperren..

  25. Ich fand diese SCHEISSS-Seite über die Suchmaschinensuche nach „diese seite daran hindern weitere dialoge zu öffnen“, in der Hoffnung, dem FF diesen Fehler austreiben zu können. Aber hier wird das Thema gar nicht behandelt.

  26. Hallo,
    erstmal danke für das Torturial.
    Ich habe dein letzten Code mal kopiert um ihn zu testen, damit ich’s sehe und besser verstehe. Jedoch wird der SlideFade link nicht angezeigt. Er wird beim öffnen der Seite in millisekunden angezeigt und direkt vollständig ausgeblendet.
    Ich steig nur nicht dahinter warum das so ist.

    Wäre nett, wenn du eine korrektur davon machen könntest. 🙂 Weil ich fang‘ gerade mit Javascript / AJAX erst an.

    Lg
    Marcel

    /*Mehrer Effekte bestimmen*/
    $(„a#slideFade“).toggle(function(){
    $(„div“).animate({ height: ‚hide‘, opacity: ‚hide‘ }, ’slow‘);
    },function(){
    $(„div“).animate({ height: ’show‘, opacity: ’show‘ }, ’slow‘);
    })

Leave a Comment

Ihre E-Mail-Adresse wird nicht veröffentlicht.

This site uses Akismet to reduce spam. Learn how your comment data is processed.