JQuery – Elemente ein‑/ausklappen

Hartmut 11. Juni 2009 um 01:06 Uhr

Jetzt hat mich der liebe Sascha so dermaßen “motiviert”, dass ich es unbedingt loswerden muss, wie man denn hier im Kommentarfeld die lustigen Smileys ein‑ und ausklappen kann. Mittlerweile gibt es ja doch einige Blogs, die eine recht stattliche Anzahl von Smiley-Kollektionen anbieten.

Ich möchte das im Prinzip relativ simple Thema auch ein wenig einfacher erklären und nicht lange mit Code um mich werfen, andererseits soll diese kurze Erklärung ausreichend sein, alles, nicht nur Smileys ein‑ und ausblendbar zu machen.

Das ganze funktioniert über eine JavaScript-Bibliothek, die WordPress von Hause aus schon implementiert hat und die automatisch bereits geladen sein sollte. Wer das nicht weiß, sollte auf seiner Webseite mal mit dem Browser die rechte Maustaste drücken und sich den Quelltext anschauen. Dort sollte relativ weit oben eine Zeile stehen, die so aussieht:

<script type='text/javascript' src='http://www.deine-domain.de/wp-includes/js/jquery/jquery.js?ver=1.2.6'></script>


Wichtig ist, dass die jquery.js aus dem WordPress Ordner kommt, weil es eine für den Blog angepasste Version ist.

JQuery vereinfacht die Programmierung der sog. DOM-Bäume. Ich will darauf gar nicht eingehen und komme mal gleich zum Kommentarfeld und den Smileys. Die Smileys selbst werden durch das Plugin LMB^Box Smileys eingebunden. Der PHP-Befehl soll laut Anweisung an die Stelle, an der die Smileys erscheinen sollen mit dem Befehl

<?php if (function_exists('lmbbox_smileys_display')) { lmbbox_smileys_display(true); } ?>

erfolgen.

Um jetzt mittels JQuery einen klappbaren Bereich/Effekt einzurichten, bedarf es zweier Klassen oder IDs. Ich nutze lieber Klassen, weil ich diese ggf. noch an weiteren Stellen im Blog nutzen möchte. Für die Überschrift – also Smileys einklappen/ausklappen habe ich die Klasse smile_head und für den Bereich, um die Smileys, also die Box sozusagen, die dann ein‑ und ausklappt, habe ich die Klasse smile_body gewählt. Innerhalb dieser Klasse kommt dann der php-Befehl, um die Smileys darzustellen.

Das ganze sieht bei mir im Kommentarfeld so aus:

<!-- Smileys Anfang -->
<span class="smile_head"><b>Smilies anzeigen/verstecken</b></span>
<div class="smile_body">
<?php if (function_exists('lmbbox_smileys_display')) { lmbbox_smileys_display(true); } ?>
</div>
<!-- Smileys Ende –>
 

Natürlich lassen sich diese Klassen jetzt auch bequem per CSS anpassen, aber darauf gehe ich jetzt (noch) nicht ein, weil ich es hier auch nicht gemacht habe.

Jetzt bleibt eigentlich nur noch ein wenig JavaScript, um mittels JQuery die Smileys ein‑ und ausblenden zu lassen. Grundsätzlich sollen die lustigen Bildchen ja ausgeblendet sein, dafür müssen wir dem smile_body sagen, dass er zunächst einmal versteckt bleiben soll.

Eine Eigenart der WordPress jquery-Bibliothek ist, dass sich die von mir angesprochenen DOMs (das ist z.B. die Klasse smile_body) nicht mit einem $ ansprechen lassen sondern mit dem Befehl jquery.

Die Anweisung lautet somit ausgeschrieben:

jQuery('.smile_body').hide();
 

Jetzt ist sozusagen der Inhalt “versteckt”. Wer seine Smileys immer angezeigt bekommen haben und sie erst beim Mausklick ausblenden will, der nimmt statt .hide einfach .show.

Der nächste Schritt ist die Anweisung, dass bei einem Klick auf Smileys anzeigen, das versteckte Element angezeigt und bei einem erneuten Klick wieder ausgeblendet wird. Dafür gibt es erstens den sogenannten Event-Handler der auf den Mausklick reagiert. Nur muss bei einem Klick auf smile_head das nachfolgende Element smile_body angesprochen werden. Der Mausklick muss sozusagen weitergegeben werden. Zweitens gibt es den Effekt, in diesem Falle benutze ich SlideToggle. Um das ganze abzukürzen, schicke ich mal den kompletten Code, der eingebunden werden muss hier hinein:

<script language="JavaScript">
<!--
jQuery(document).ready(function()
{
  //Alle Elemente mit der Klasse smile_body verstecken
  jQuery('.smile_body').hide();
  //element mit Klasse smile_body ein/ausblenden
  jQuery('.smile_head').click(function()
  {
    jQuery(this).next('.smile_body').slideToggle(600);
  });
});
//-->
</script>
 

Im Prinzip ist alles eine große Funktion von JQuery und die muss am Anfang initialisiert werden. Aber mehr möchte ich dazu gar nicht sagen. Denn das war es schon.

Wo der Code übrigens steht, ob im Header, in der functions.php, im Footer ist zunächst einmal grundsätzlich egal. Ich selbst habe momentan den Code in der comments.php, weil hier wird er ja auch benötigt.

Kleine Anpassungen habe ich übrigens noch in der style.css vorgenommen. Da ja kein Link hinter dem Text “Smileys einklappen/ausklappen steht, verändert sich der Mauszeiger wie bei einem gewöhnlichen Link nicht, daher habe ich ins CSS noch

.smile_head {
cursor: pointer;
}

eingefügt.

So, ich hoffe, ich konnte viele Unklarheiten schaffen. Ansonsten scheue Dich nicht, einfach nachzufragen oder Verbesserungsvorschläge zu machen.

Im Prinzip lassen sich auf diese Art und Weise alle möglichen Elemente, sogar die Seitenleiste, Header oder was auch immer ein‑ und ausblenden. Einfach mal probieren. Wenn man erst mal anfängt, macht es wirklich Spaß.

Zufallsauswahl ähnlicher Artikel

10 Kommentare zu “JQuery – Elemente ein‑/ausklappen”

  1.  Moosi am 11. Juni 2009 um 09:44 Uhr

    vielen Dank für Deine Mühe *g* – so schön das bei Dir aussieht; es ist trotzdem keine Herausforderung für mich ;-)

  2.  Hartmut am 11. Juni 2009 um 09:58 Uhr

    @Moosi: Ich hab Dein Theme noch hier. Ich kann es Dir gerne einbinden. :rolleyes_tb:

  3.  Sascha am 11. Juni 2009 um 11:22 Uhr

    Danke für die Info :) So umfangreich ist der Code ja gar nicht, was wohl in erster Linie am Rückgriff auf die Bibliothek liegen dürfte, richtig? Tja, Feiertag, draußen regnet und stürmt es… vielleicht werde ich mich doch mal dran setzen udn das so einbauen. Auch wenn ich persönlich ja eigentlich nicht so der große Smiley-Fan bin und mit den Standard-Smileys, die man so tippt, auskomme. Aber Leute wie ich müssen die Dinger ja auch dank der Slider-Funktion nicht ständig alle auf einem Haufen versammelt sehen^^

  4.  Luigi am 11. Juni 2009 um 17:53 Uhr

    Das ist ja toll! Sowas will ich auch haben! Ich werd das mal probieren und wenns nicht klappt liegt es bestimmt nicht an mir :jittery_tb:

  5.  Hartmut am 11. Juni 2009 um 19:52 Uhr

    @Sascha: Ja, allerdings. Mit dieser JQuery-Bibliothek lassen sich allerlei lustige Dinge anfangen. Und das schöne ist, wie ich es auch von der alten Prototype-Klasse kenne, dass man direkt Klassen oder IDs anspringen kann, ohne ellenlange Ketten von DOM-Pfaden zu bilden. aber ich schweife ab. Bastel mal und entdecke, was mit ein wenig Code möglich ist.

    Der Blog ist ja normalerweise kein „Techno“-Blog aber ich werde, wenn das gewünscht ist und keinen verschreckt, gerne mal hin und wieder einen Anwendungs-Text schreiben.

    @Luigi: Eigentlich sollte das, was ich da zusammen gebastelt habe, überall funktionieren. wenn nicht, schreib halt, ich helfe ja immer wieder gerne, weißte doch!

  6.  Sascha am 11. Juni 2009 um 20:08 Uhr

    @Hartmut
    Also ich hätte sicherlich nichts gegen den ein oder anderen Anwendungs-Text auf deinem Blog ;) An praktischen Beispielen lernt es sich meist ja sowieso viel besser als in rein theoretischen Dokumentationen – die sind in meinen Augen oft eher als Nachschlagewerk brauchbar, wenn man den Dreh einmal raus hat :D

    Ich werde aber jetzt erstmal weiter mit meinem 2.8er-WP-Update experimentieren. Ich lass das gerade auf meiner Offline-Test-Blog-Kopie laufen, um zu schauen, ob ich das Update wagen kann, welche Verbesserungen es tatsächlich gibt, wie es mit der Geschwindigkeit aussieht, ob die Plugins alle problemlos laufen, ob es sonst irgendwelchde Macken gibt, die sich eingeschlichen haben etc. Man konnte ja heute schon von so manchem kleinen Problem lesen. Sollte da bei mir nicht alles richtig rund laufen, werd ich halt noch ein paar Tage abwarten, bis die Kinderkrankheiten ausgebessert wurden, die Plugins 100 % kompatibel sind etc. Denn sooo dringend ist das Update in diesem Fall ja nun auch nicht nötig^^

  7.  Neuerungen im Kommentar-Bereich | GESICHTET.net am 13. Juni 2009 um 14:24 Uhr

    [...] der freundlichen Unterstützung durch Hartmut, der auf seinem Blog eine feine Beschreibung zu dem Thema geschrieben hat, gibt es ab sofort hier [...]

  8. [...] (a href). Dieser muss nicht sein, aber dann sollte das onclick-Event wenigstens wieder wie bei den Smileys per CSS entsprechend gekennzeichnet werden (Mauszeiger) [...]

  9.  Paul am 7. Juli 2009 um 03:03 Uhr

    Das ist ein wirklich gelungener Artikel. Ich hab da so eine Idee und werde mal versuche das ganze auf meiner privaten Internetpräsenz umzusetzen.

  10.  Hartmut am 7. Juli 2009 um 04:54 Uhr

    @Paul: Sehr gerne. Sag Bescheid, wenn Du diesbezüglich Hilfe brauchst bzw. ich zum „bewundern“ kommen darf ;)

Trackback URI | Kommentare als RSS

Einen Kommentar schreiben

Bold Italic Link Blockquote  Alle HTML-Tags sind erlaubt!
 Zum Bezug auf einen Kommentar, auf laufende Nummer klicken!

Smilies anzeigen/verstecken
:smile_wp: :biggrin_wp: :sad_wp: :surprised_wp: :eek_wp: :confused_wp: :cool_wp: :lol_wp: :mad_wp: :razz_wp: :redface_wp: :cry_wp: :evil_wp: :twisted_wp: :rolleyes_wp: :wink_wp: :exclaim_wp: :question_wp: :idea_wp: :arrow_wp: :neutral_wp: :mrgreen_wp: :annoyed_tb: :blink_tb: :blush_tb: :bye_tb: :clap_tb: :cool1_tb: :drunk_tb: :devil_tb: :doh_tb: :down_tb: :dry_tb: :dunce_tb: :flush_tb: :guns_tb: :furious_tb: :glurps_tb: :happy_tb: :huh_tb: :innocent1_tb: :jittery_tb: :smoke_tb: :king_tb: :laugh_tb: :lol_tb: :mad_tb: :mellow_tb: :nono_tb: :help_tb: :ohmy_tb: :ponder_tb: :rolleyes_tb: :sad_tb: :shock_tb: :sleep_tb: :thumbup_tb: :smile1_tb: :surrender_tb: :tongue1_tb: :tongue2_tb: :unsure_tb: :wacko_tb: :thumbdown_tb: :wink1_tb: :wub_tb: :cool2_tb: :cry_tb: :embarassed_tb: :foot_in_mouth_tb: :wallbash_tb: :frown_tb: :innocent2_tb: :kiss_tb: :laughing_tb: :money_mouth_tb: :sealed_tb: :smile2_tb: :surprised_tb: :tongue3_tb: :undecided_tb: :smiley2_tb: :yell_tb: :) :) :D :x :P 8) 8x 8P :o 8O :( :? ;) :!: :?: :| :lol_ee: :smirk1_ee: :rolleyes_ee: :tongue_laugh_ee: :tongue_rolleye_ee: :tongue_wink_ee: :rasberry_ee: :ohh_ee: :grrr_ee: :gulp_ee: :ohoh_ee: :embarrassed_ee: :sick_ee: :shuteye_ee: :hmm1_ee: :angry_ee: :zip_ee: :kiss_ee: :shock_ee: :smirk2_ee: :grin2_ee: :hmm2_ee: :vampire_ee: :snake_ee:

Beitragsnavigation

« | »

SetTextSize SetPageWidth