Frontends mit jQuery - Nützliche Codeschnipsel
Einige nützliche Codeschnipsel, die einem bei der Arbeit mit jQuery doch den einen oder anderen guten Dienst erweisen. Grundlage ist die jQuery Javascript Library
Anzeige Hier werben
Funktionen aufrufen
Einige der nachfolgenden Schnipsel werden aufgerufen, sobald der DOM geladen ist. Dies hat gegenüber einer Initialisierung per onload den Vorteil, dass die Funktionen bereits ausgeführt werden, bevor externe Quellen, wie z.B. CSS-Dateien oder Bilder in den Browsercache geladen sind. Der folgende Code wird Euch also öfter begegnen …
1 2 3 | $(function () {
doSomething();
});
|
Grundsätzlich wird dieses über die ready() -Funktion gemacht, in den Beispielen findet sich aber meistens die kurze Schreibweise (jQuery(callback)), die das Gleiche tut, aber einfach bequemer zu schreiben ist.
Dokumentformate automatisch erkennen und Klassen für Links vergeben
Beschreibung
Gerade bei Dokumenttypen, bei denen eine externe Anwendung gestartet wird um die Inhalte wiederzugeben (z.B. *.pdf, *.mov, *mpg) macht es Sinn, den Benutzer visuell auf die Art der Datei hinzuweisen. Der Klassiker ist hier wohl ein kleines Icon vor dem Link. Wäre CSS 3 schon im Alltag benutzbar, könnte man bequem auf die Attribut-Selektoren zurückgreifen und so per CSS auf die Art der verlinkten Datei reagieren:
1 2 3 4 | a[href=$pdf] {
background: url(icons/pdf.gif) no-repeat 0 50%;
padding-left: 18px;
}
|
Diese Definition würde jetzt jeden Link, dessen HREF-Attribut mit pdf endet mit dem gewünschten Icon versehen. Hört sich gut an, oder? Leider Leider ist CSS 3 ja nun noch kein Standard und eine Praxistauglichkeit der neuen Version möchte ich in den nächsten Jahren mal dahingestellt wissen. Aber: jQuery ist ja nun ziemlich ausgebufft und hat die CSS3-Selektoren implementiert.
Anwendung
Mit einem kleinen Schnipsel, der aufgerufen wird, sobald der DOM geladen ist, erzielen wir den gewünschten Effekt - browserübergreifend:
1 2 3 | $(function () {
$("a[href$='pdf']").addClass('pdf');
});
|
So bekommt nun jeder Link, der auf ein PDF-Dokument zielt, automatisch eine Klasse verpasst, mit der wir bequem im CSS weiterarbeiten können.
Styling HRs - jQuery-style
Beschreibung
Die semantische Gliederung eines HTML-Dokuments erfolgt vorgesehener Maßen über die Überschriften der Ordnung 1-6. Zusätzlich kennzeichnen Horizontale Linien - also eine <hr /> - sowohl visuell als auch logisch die Grenzen zwischen Abschnitten im Dokument. Verschiedene Formatierungen der HR per CSS sind problemlos und browserübergreifend möglich, einzig bei der Verwendung eines Hintergrundbildes stößt man auf das - im verlinkten Artikel beschriebene - Problem, dass der IE6 und verschiedene Opera-Versionen einen störenden Rahmen um die - nun eher als Grafik formatierte - Linie anzeigen. Der Lösungsansatz aus LanTastics Artikel, indem die HR in ein zusätzliches Div eingebettet wird, funktioniert natürlich wunderbar. Der Übersicht halber hier noch einmal das Konstrukt:
1 | <div class="hr"><hr /></div>
|
1
2
3
4
5
6
7
8
9 | div.hr {
width: 400px;
height: 20px;
background: url(bg-hr.gif) no-repeat;
}
div.hr hr {
display: none;
}
|
Anwendung:
Nun ist das Ganze allerdings ein wenig unpraktisch, denn das HTML-Konstrukt muss ja in den Quelltext. Klar, serverseitig ausgeben geht, aber das bläht den Quelltext des Dokuments nur unnötig auf. Die kleine, aber feine Funktion wrap() erledigt das für uns - eben jQuery-style:
1 2 3 | $(function () {
$('hr').wrap("<div class='hr'></div>");
});
|
Was passiert jetzt? Ganz einfach: Der DOM wird nach dem Element HR abgesucht und ebensolches in das zusätzliche Div eingekuschelt, das wir zum erweiterten Styling brauchen. So bleibt der Quelltext sauber und ich denke, die eine Zeile im JS ist es allemal wert.
Beispiel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>wmp-styling-hrs</title>
<style type="text/css" media="screen">
div.hr {
height: 20px;
margin: 2em;
background: url(http://www.webmasterpro.de/portal/article/freunde-von-wmp.html/image/code_Coder.png) repeat-x;
}
div.hr hr {
display: none;
}
</style>
<script type="text/javascript" charset="utf-8" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js"></script>
<script type="text/javascript" charset="utf-8">
$(function () {
$('hr').wrap("<div class='hr'></div>");
});
</script>
</head>
<body>
<hr />
</body>
</html>
|
Externe Links in neuem Fenster öffnen
Beschreibung
Externe Links werden automatisch mit einem target="_blank" versehen. Dabei wird über einen Attribut-Selektor gefiltert, ob der Link mit dem http:// Prefix versehen ist. Zusätzlich wird über den :not - Selektor die eigene Domain von der Regel ausgenommen.
Anwendung
1 2 3 | $(function () {
$('a[href~="http://"]:not([href~="http://www.meinedomain.de/"])').attr({target: "_blank"});
});
|
Externe Links kennzeichnen
Soweit so gut, die externen Links öffnen sich in einem neuen Fenster. Natürlich gibt es auch eine ziemlich simple Lösung dafür, diese auch als externe Links zu kennzeichnen, indem man über's CSS Einfluss auf die Gestaltung nimmt (Siehe auch Dokumentformate automatisch erkennen und Klassen für Links vergeben ). Das ganze können wir per addClass() simpel an unsere bestehende Funktion anhängen.
1 2 3 | $(function () {
$('a[href~="http://"]:not([href~="http://www.webmasterpro.de/"])').attr({target: "_blank"}).addClass("extern");
});
|
So bekommt jeder externe Link die Klasse .extern verpasst, die wir dann im CSS definieren können, z.B. so:
1 2 3 4 | a.extern {
padding-right: 10px;
background: url(linkout.gif) no-repeat 100% 50%;
}
|
Beispiel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Externe Links im neuen Fenster öffnen</title>
<script type="text/javascript" charset="utf-8" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js"></script>
<style type="text/css" media="screen">
ul {
list-style: square;
font: .9em/1.4 helvetica, arial, sans-serif;
}
a {
color: #600;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
a.extern {
padding-right: 10px;
background: url(http://www.ingowagener.de/drop/examples/linkout.gif) no-repeat 100% 50%;
}
</style>
<script type="text/javascript" charset="utf-8">
$(function () {
$('a[href~="http://"]:not([href~="http://www.webmasterpro.de/"])').attr({target: "_blank"}).addClass("extern");
});
</script>
</head>
<body>
<ul>
<li><a href="http://www.ingowagener.de">www.ingowagener.de</a></li>
<li><a href="http://www.google.de">www.google.de</a></li>
<li><a href="http://www.macnews.de">www.macnews.de</a></li>
<li><a href="http://www.webmasterpro.de/coding/article/css-freie-schriftwahl-fuer-die-website.html">Freie Schriftwahl für die Website? (Artikel auf webmasterpro.de)</a></li>
</ul>
</body>
</html>
|
Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 2 Personen an der Seite "Frontends mit jQuery - Nützliche Codeschnipsel" mitgewirkt.
Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Frontends mit jQuery - Nützliche Codeschnipsel" hier bearbeiten.
-
hat keine Beschreibung angegeben. Eine Beschreibung kann man unter dem Punkt "Profil bearbeiten" im Kontrollzentrum eintragen.
-
graphic, motion & web design - kernreaktor - mutter kind turnen


Non JS und JS
Ich finde diese Lösungen sind ziemlich schlecht gelöst.
Bin immer noch der Meinung, dass eine Seite sowohl mit Javascript, als auch ohne weitestgehend gleich aussehen sollte. Natürlich ohne bestimmte Funktionen wie Slider, FadeEffekten etc. Aber den Leuten die ohne Javascript surfen (was ja oftmals irgendeinen Grund hat), direkt diverse kleine Hilfssymbole etc zu entziehen finde ich falsch, zumal einem Link die Klasse PDF hinzuzüfgen den Code nicht wirklich aufbläht, genauso wenig wie das <div class=hr><hr></div>. Einzigst gut gelöst ist die Methode mit externen Links für XHTML Strict 1.0
Selectors...
Meiner Meinung nach wird in diesem Artikel mehr auf Selektoren eingegangen, deswegen finde ich den Titel etwas schlecht gewählt.
Re: Selectors...
… und meiner Meinung nach kann da noch 'ne ganze Menge rein. Rom und einen Tag und so …
Man nicht hibbelig werden … a) ist bald Jupp ihm sein geburtstag und b) wollen die Brötchen auch verdient werden.
Re: Selectors...
Ähm, ja. Lass ich jetzt mal so stehen ohne einen Zusammenhang zum schlecht gewählten Titel zu sehen. Und wenn da noch ne Menge reinkommt und es noch nicht fertig ist, ist es ne Baustelle.
Aber okay, war ja nur ein Vorschlag. ;)