<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Norman&#039;s Blog &#187; jQuery</title>
	<atom:link href="http://www.normansblog.de/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.normansblog.de</link>
	<description>News über CSS, jQuery, Firefox und andere Browser sowie aktuelle Kinofilme.</description>
	<lastBuildDate>Fri, 21 Sep 2018 13:18:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>$(&#8216;option&#8217;).hide(); = No-Go</title>
		<link>http://www.normansblog.de/select-options-mit-jquery-verstecken/</link>
		<comments>http://www.normansblog.de/select-options-mit-jquery-verstecken/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 16:44:45 +0000</pubDate>
		<dc:creator>Norman</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.normansblog.de/?p=2336</guid>
		<description><![CDATA[Achtung, für alle, die sowas mal machen müssen.. Diese Woche musste ich auf Arbeit im Zusammenhang mit einem Projekt ein Formular umsetzen, dass eine Besonderheit hatte: Es bestand aus zwei Selectboxen, die voneinander abhängig waren. D.h. wenn man mit einer Selectbox etwas ausgewählt hat, sollten sich die Optionen der zweiten Selectbox ändern (wegfallen oder dazu [...]]]></description>
			<content:encoded><![CDATA[<p>Achtung, für alle, die sowas mal machen müssen..</p>
<div id="attachment_2339" class="wp-caption alignright" style="width: 220px"><a href="http://www.normansblog.de/select-options-mit-jquery-verstecken/"><img src="http://www.normansblog.de/wp-content/uploads/2010/04/JQuery_logo_color_onwhite-e1271521504263.png" alt="jQuery" title="JQuery_logo_color_onwhite" width="200" class="size-full wp-image-2339" /></a><p class="wp-caption-text">options verstecken ist gar nicht so einfach, auch nicht mit jQuery</p></div>
<p>Diese Woche musste ich auf Arbeit im Zusammenhang mit einem Projekt ein Formular umsetzen, dass eine Besonderheit hatte: Es bestand aus zwei Selectboxen, die voneinander abhängig waren. D.h. wenn man mit einer Selectbox etwas ausgewählt hat, sollten sich die Optionen der zweiten Selectbox ändern (wegfallen oder dazu kommen). Ich habe mir daraufhin mit <a href="http://www.jquery.com/">jQuery</a> eine Funktion geschrieben, die das für mich erledigt.</p>
<p><span id="more-2336"></span></p>
<p>Ohne mir groß etwas dabei zu denken, nutzte ich die <a href="http://api.jquery.com/hide/">hide()-Funktion</a>, die jQuery standardmäßig mitbringt. Alles funktionierte einwandfrei in Firefox und da ich davon ausgegangen bin, dass das JavaScript-Framework Cross-Browser-kompatibel ist, teste ich die Funktion nicht in anderen Browsern und kümmerte mich stattdessen erstmal um das Layout. Als alles fertig war, freute ich mich, rechnete meine Zeit ab und widmete mich anderen Tickets.</p>
<p>Gestern Mittag dann erhielt ich den Hinweis, dass die Auswahl der Selectboxen im IE7 nicht funktioniert. Gut dachte ich mir.. schaust es dir mal an.. und tatsächlich: egal was ausgewählt wurde, die zweite Selectbox blieb mit allen Optionen befüllt, es tat sich nichts.</p>
<blockquote><p>Verdammter Internet Explorer!</p>
</blockquote>
<p>.. schoss mir durch den Kopf. Also öffnete ich Opera, Chrome und Safari und testete das Formular dort &#8211; wieder nichts. <strong>In keinem Browser</strong> (außer Firefox) funktionierte die Auswahl. Langsam wurde ich etwas nervös..</p>
<blockquote><p>Wie löse ich das Problem jetzt ohne viel Aufwand?!</p>
</blockquote>
<p>Ich überlegte kurz und dann viel mir die Lösung ein, anstatt die <code>option</code>-Tags zu verstecken, musste ich sie nur deaktivieren. Also hab ich die <code>hide()</code>-Funktion mit <a href="http://api.jquery.com/attr/#attr2">attr(&#8216;disabled&#8217;,'disabled&#8217;)</a> ausgetauscht und schon gings. Yay, der Tag war gerettet!</p>
<blockquote class="idea"><p><strong>Merke:</strong></p>
<p><em>Niemals</em> <code>options</code> versuchen zu verstecken, das funktioniert nicht in allen Browsern, einfach nur deaktivieren!</p>
</blockquote>
<p>Wieder etwas dazu gelernt! <img src='http://www.normansblog.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.normansblog.de/select-options-mit-jquery-verstecken/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Simple jQuery Accordion</title>
		<link>http://www.normansblog.de/simple-jquery-accordion/</link>
		<comments>http://www.normansblog.de/simple-jquery-accordion/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 20:26:53 +0000</pubDate>
		<dc:creator>Norman</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.normansblog.de/?p=1587</guid>
		<description><![CDATA[Wie macht man eigentlich.. Habt ihr schon mal eine Seite mit so einem netten Accordion-Effekt gesehen und euch gefragt wie das geht? Ich erkläre es euch, schaut euch doch aber erstmal die Demo an, damit ihr wisst, was ich meine. Wie ihr seht, klappt immer der Bereich auf, auf den geklickt wird. Alle anderen Blöcke [...]]]></description>
			<content:encoded><![CDATA[<p>Wie macht man eigentlich..</p>
<p><a href="http://www.normansblog.de/simple-jquery-accordion/"><img src="http://www.normansblog.de/wp-content/uploads/2009/07/js.png" alt="js" title="js" width="100" height="98" class="alignright size-full wp-image-1033" /></a>Habt ihr schon mal eine Seite mit so einem netten Accordion-Effekt gesehen und euch gefragt wie das geht? Ich erkläre es euch, schaut euch doch aber erstmal <a href="http://www.normansblog.de/demos/simple-jquery-accordion/">die Demo</a> an, damit ihr wisst, was ich meine.</p>
<p>Wie ihr seht, klappt immer der Bereich auf, auf den geklickt wird. Alle anderen Blöcke bleiben dagegen geschlossen oder schließen sich. Wir bedienen uns hier einfach jQuery und schreiben ein paar Zeilen Code, die den gewünschten Accordion-Effekt realisieren.</p>
<p><span id="more-1587"></span></p>
<div class="demolink"><a href="http://www.normansblog.de/demos/simple-jquery-accordion/">Accordion Demo</a></div>
<h3>HTML-Gerüst</h3>
<p>Bevor wir anfangen müssen wir unser HTML aber entsprechend vorbereiten..</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;trigger&quot;</span>&gt;</span>Accordion Box 3<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;toggle_container&quot;</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>Lorem ipsum dolor sit amet...<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>Jeder dieser Blöcke besteht aus einer Überschrift, die später anklickbar sein wird und einem Container, der den eigentlichen Inhalt des Blocks enthält. Wichtig ist, dass wir die Klassen <em>trigger</em> den Überschriften und <em>toggle_container</em> den Containern geben, da später unser jQuery-Code an Hand derer die Aktionen ausführt. Es ist also egal, ob die Überschrift eine <code>h1</code>, <code>h2</code> oder einfach nur ein <code>div</code> ist, wichtig ist die Klasse und dass danach sofort der Container folgt.</p>
<h3>jQuery-Code</h3>
<p>Nun zum eigentlichen Code. Vergesst aber nicht, dass ihr vor diesem Script die jQuery-Bibliothek in euer Dokument einbinden müsst! Wie das geht, erfahrt ihr auf der<a href="http://docs.jquery.com/How_jQuery_Works"> offiziellen jQuery-Seite</a>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.trigger'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">not</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.trigger_active'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.toggle_container'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.trigger'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">var</span> trig <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> trig.<span style="color: #660066;">hasClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'trigger_active'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			trig.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.toggle_container'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			trig.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'trigger_active'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.trigger_active'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.toggle_container'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.trigger_active'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'trigger_active'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			trig.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.toggle_container'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			trig.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'trigger_active'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Nun zur Erklärung, was da eigentlich abläuft..</p>
<ol>
<li>Erst nachdem das <a href="http://de.wikipedia.org/wiki/Document_Object_Model">DOM</a> vollständig geladen ist, greift das Script.</li>
<li>Schließe alle Container, deren Übschrift nicht die Klasse <em>trigger_active</em> hat.</li>
<li>Klickt man auf ein Element der Klasse <em>trigger</em> wird geprüft:
<ul>
<li>Hat es auch die <em>trigger_active</em>-Klasse? Dann mach den darauf folgenden Container zu und entferne die active-Klasse.</li>
<li>Ansonsten schließe alle offenen Container und öffne nur den Container, der zur gerade angeklickten Überschrift gehört und gib dieser die active-Klasse.</li>
</ul>
</li>
<li>Es wird kein Wert am Ende der Funktion zurückgegeben (sollte eine Überschrift gleichzeitig ein Link sein).</li>
</ol>
<blockquote class="idea">
<h4>Zu 2.: Stichwort &#8211; Accessibility</h4>
<p>Das Schließen der Container würde auch über CSS (display:none) gehen aber was ist, wenn JavaScript nicht aktiviert ist? Dann würden die Leute den Inhalt der Container nicht mehr sehen, weil das Accordion nicht funktioniert.</p>
</blockquote>
<h3>Styling per CSS</h3>
<p>Um das Ganze noch abzurunden, hier der CSS-Code der Demo.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.trigger</span> <span style="color: #00AA00;">&#123;</span>
	-moz-border-radius<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	-webkit-border-radius<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">border-radius</span><span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	-moz-box-shadow<span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #933;">1px</span> <span style="color: #933;">1px</span> <span style="color: #cc00cc;">#fff</span> <span style="color: #993333;">inset</span><span style="color: #00AA00;">;</span>
	-webkit-box-shadow<span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #933;">1px</span> <span style="color: #933;">1px</span> <span style="color: #cc00cc;">#fff</span> <span style="color: #993333;">inset</span><span style="color: #00AA00;">;</span>
	box-shadow<span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #933;">1px</span> <span style="color: #933;">1px</span> <span style="color: #cc00cc;">#fff</span> <span style="color: #993333;">inset</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">background</span><span style="color: #3333ff;">:-moz-linear-</span>gradient<span style="color: #00AA00;">&#40;</span><span style="color: #993333;">center</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#e9e9e9</span> <span style="color: #933;">50%</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#ddd</span> <span style="color: #933;">50%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#ddd</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#ddd</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#888</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span><span style="color: #993333;">pointer</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">margin-bottom</span><span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #933;">1px</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc00cc;">#fff</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">388px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.trigger_active</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#333</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.toggle_container</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">5px</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">380px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<blockquote class="idea"><p>Wenn ihr das Problem habt, dass die Animation nicht flüssig ist sondern abrupt endet, versucht mal der Klasse <code>trigger_container</code> eine feste Breite zu geben. Damit sollte es klappen.</p>
</blockquote>
<p>Allerdings ist das natürlich nur ein sehr rudimentäres Aussehen. Wie wäre es zum Beispiel mit einem Plus- oder Minussymbol, damit Benutzer gleich wissen: &#8220;Ah, hier kann ich also etwas auf-/zuklappen&#8221;? Eurer Kreativität sind hier natürlich keine Grenzen gesetzt. Viel Spaß mit eurem Accordion. <img src='http://www.normansblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="demolink"><a href="http://www.normansblog.de/demos/simple-jquery-accordion/">Accordion Demo</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.normansblog.de/simple-jquery-accordion/feed/</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>jQuery Einzeiler</title>
		<link>http://www.normansblog.de/jquery-one-liners/</link>
		<comments>http://www.normansblog.de/jquery-one-liners/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 12:16:27 +0000</pubDate>
		<dc:creator>Norman</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.normansblog.de/?p=1129</guid>
		<description><![CDATA[Hello again, Heute möchte ich euch gern drei jQuery Knodeschnippsel zeigen, die ich fast bei jedem Projekt benutze oder die zumindest hier und da mal nützlich sein könnten. Alles, was man dafür braucht, ist die aktuelle jQuery Version in seine Seiten einzubinden. Die drei Einzeiler lauten wie folgt: Intelligente Suchleiste Table Zebrastreifen Nach Oben Scrollen [...]]]></description>
			<content:encoded><![CDATA[<p>Hello again,<br />
<a href="http://www.normansblog.de/jquery-one-liners/"><img src="http://www.normansblog.de/wp-content/uploads/2009/07/js.png" alt="js" title="js" width="100" height="98" class="alignright size-full wp-image-1033" /></a></p>
<p>Heute möchte ich euch gern drei jQuery Knodeschnippsel zeigen, die ich fast bei jedem Projekt benutze oder die zumindest hier und da mal nützlich sein könnten. Alles, was man dafür braucht, ist die <a href="http://docs.jquery.com/Downloading_jQuery#Current_Release">aktuelle jQuery Version</a> in seine <a href="http://docs.jquery.com/How_jQuery_Works">Seiten einzubinden</a>. Die drei Einzeiler lauten wie folgt:</p>
<ol>
<li><a href="http://www.normansblog.de/jquery-one-liners/#searchbar">Intelligente Suchleiste</a></li>
<li><a href="http://www.normansblog.de/jquery-one-liners/#tablezebra">Table Zebrastreifen</a></li>
<li><a href="http://www.normansblog.de/jquery-one-liners/#b2tscroll">Nach Oben Scrollen</a></li>
</ol>
<p><span id="more-1129"></span></p>
<h3 id="searchbar">Intelligente Suchleiste</h3>
<p>Im folgenden Beispiel ist der jQuery Code direkt in ein <code>input</code>-Tag geschrieben.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;searchstring&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Search&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">onfocus</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;if(this.value=='Search') this.value='';&quot;</span> </span>
<span style="color: #009900;"><span style="color: #000066;">onblur</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;if(this.value=='') this.value='Search';&quot;</span><span style="color: #66cc66;">/</span>&gt;</span></pre></td></tr></table></div>

<p>Was die Suchbar macht:</p>
<ol>
<li>Das Suchfeld wird über das <code>value</code>-Attribut mit dem Begriff &#8220;Search&#8221; befüllt.</li>
<li>Klickt man in das Feld, wird &#8220;Search&#8221; entfernt und man kann seinen eigenen Suchbegriff eingeben.</li>
<li>Wenn etwas anderes als &#8220;Search&#8221; im Feld steht und man klickt hinein, wird der Cursor hinter das aktuelle Wort gesetzt.</li>
<li>Verlässt man das Suchfeld und es befindet sich kein Suchbegriff darin, wird es wieder mit &#8220;Search&#8221; befüllt.</li>
</ol>
<h3 id="tablezebra">Table Zebrastreifen</h3>
<p>Oftmals will man Tabellenzeilen in sich abwechselnden Farben darstellen. Dazu müsste man den geraden/ungeraden <code>tr</code>-Tags immer eine Klasse geben. Das Problem ist, was macht man, wenn die Tabellen generiert werden? Hier hilft uns jQuery weiter, indem wir sagen: Suche in jeder Tabelle nach allen geraden/ungeraden <code>tr</code>-Tags und gebe ihnen eine CSS Klasse. Folgender Code bewirkt genau das:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;tr:nth-child(odd)&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;odd&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Per CSS kann man dann den den Zellen eine andere Hintergrundfarbe geben (hier ein helles grau):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">tr<span style="color: #6666ff;">.odd</span> td <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#e9e9e9</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p><strong>Anmerkung:</strong> Das Beispiel durchsucht wirklich <em>alle</em> Tables. Um die Suche einzugrenzen, sollte man vor dem Selektor noch ein weiteres Element schreiben, z.B. &#8220;#content&#8221; ($(&#8220;#content tr:nth-child(odd)&#8221;)). Dann werden nur Tables innerhalb des Content-Divs durchsucht und entsprechend angepasst. Weiterhin vergibt der obige Code die Klasse &#8220;odd&#8221; an alle ungeraden <code>tr</code>-Tags, beginnend also mit dem ersten.</p>
<h3 id="b2tscroll">Nach Oben Scrollen</h3>
<p>Manchmal gibt es am unteren Ende von Webseiten einen kleinen Link, der einen schnell wieder nach oben bringt. Das ist besonders nützlich, wenn die Seiten sehr lang sind und es eine Zumutung für jeden User wäre, den ganzen Weg mit dem Mausrad zu scrollen (es sei denn, man hat so ein tolles Mausrad von Logitech <img src='http://www.normansblog.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ). Diese Links heißen meistens &#8220;back to top&#8221;, &#8220;top&#8221; oder &#8220;nach oben&#8221; und mit einem Klick wird man buchstäblich nach oben katapultiert. Um die &#8220;Fahrt&#8221; etwas angenehmer zu gestalten, kann man jQuery benutzen. Dabei landet man dann nicht mehr sofort ganz oben sondern die Seite wird sehr flott nach oben gescrollt &#8211; ganz ohne Mausrad.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#toplink'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'html, body'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">animate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>scrollTop<span style="color: #339933;">:</span> <span style="color: #3366CC;">'0px'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Der HTML-Code dazu:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;toplink&quot;</span>&gt;</span>Back to Top<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span></pre></td></tr></table></div>

<p><strong>Anmerkung:</strong> Die Zahl weiter hinten gibt an, wie lange (in Millisekunden) die Animation &#8211; also das Scrollen &#8211; dauern soll.</p>
<div class="demolink"><a href="http://www.normansblog.de/demos/jquery-one-liners/">Live Demo</a></div>
<p>So das wars auch schon wieder. Wer will, kann sich die drei Sachen auch in der Live-Demo mal anschauen und ausprobieren. Kopieren ist natürlich erlaubt und erwünscht <img src='http://www.normansblog.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.normansblog.de/jquery-one-liners/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wenn CSS nicht mehr reicht..</title>
		<link>http://www.normansblog.de/when-css-is-not-enough/</link>
		<comments>http://www.normansblog.de/when-css-is-not-enough/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 23:01:22 +0000</pubDate>
		<dc:creator>Norman</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.normansblog.de/?p=1032</guid>
		<description><![CDATA[Hi-de-ho Diese Woche hatte ich auf Arbeit ein ungewöhnliches Problem, mit dem ich an die Grenzen von CSS gestoßen bin. Ich bekam die Aufgabe einige Screendesigns umzusetzen, an sich nichts Ungewöhnliches, allerdings gab es einige Bedingungen bezüglich der Sidebar: ein Widget &#8211; also eine Box innerhalb der Sidebar &#8211; sollte sich immer am unteren Rand [...]]]></description>
			<content:encoded><![CDATA[<p>Hi-de-ho</p>
<p><a href="http://www.normansblog.de/when-css-is-not-enough/"><img src="http://www.normansblog.de/wp-content/uploads/2009/07/js.png" alt="js" title="js" width="100" height="98" class="alignright size-full wp-image-1033" /></a>Diese Woche hatte ich auf Arbeit ein ungewöhnliches Problem, mit dem ich an die Grenzen von CSS gestoßen bin. Ich bekam die Aufgabe einige Screendesigns umzusetzen, an sich nichts Ungewöhnliches, allerdings gab es einige Bedingungen bezüglich der Sidebar: ein Widget &#8211; also eine Box innerhalb der Sidebar &#8211; sollte sich immer am unteren Rand der Sidebar aufhalten, wobei Sidebar und Content immer gleich hoch sein sollten, je nachdem, welches der beiden höher ist.</p>
<p><span id="more-1032"></span></p>
<h3>Das Problem</h3>
<p>Ich dachte also erstmal nach, wie ich die beiden Teilprobleme lösen könnte. Eine Box an den unteren Rand einer anderen Box zu schieben ist einfach zu lösen. Die Sidebar bekäme ein <code>position:relative</code> und das Widget <code>position:absolute</code> sowie einen kleinen Wert für <code>bottom</code>. Wie lässt man jedoch Content und Sidebar gleich hoch sein? Dafür gibt es verschiedene Ansätze. Man könnte zum Beispiel eine Tabelle benutzen oder <a href="http://alistapart.byteshift.de/fauxcolumns/">man suggeriert das Ganze</a> (faux columns), indem man eine Hintergrundgrafik benutzt.</p>
<p>Ich konnte keine Tabelle benutzen, weil man <code>position:relative</code> auf <code>td</code> Tags nicht anwenden kann und die andere Variante viel weg, weil ich wirklich zwei gleich hohe DIVs brauchte. Da saß ich also und hatte ein schier unlösbares Problem.</p>
<p>&#8220;Man müsste irgendwie abfragen können, wie hoch die beiden DIVs sind und sie dann entsprechend anpassen.&#8221;, hab ich mir gedacht und hatte damit die Lösung schon gefunden. Nach Absprache mit einem Kollegen stand fest: Mir bleibt nichts anderes übrig als JavaScript zu benutzen.</p>
<h3>Die Lösung</h3>
<p>Ich entschied mich für <a href="http://jquery.com/">jQuery</a>, das sich in einigen anderen Projekten bereits als extrem nützlich und vielseitig erwiesen hatte. Es ist außerdem sehr einfach zu erlernen und bringt neben einer guten Dokumentation auch viele coole <a href="http://plugins.jquery.com/">Plugins</a> mit sich. &#8220;Die ganze Bibliothek nur für eine simple Abfrage?&#8221;, wird sich mancher an dieser Stelle denken. Ja. Natürlich geht das auch mit reinem JavaScript aber da ich jQuery auch noch an anderer Stelle im Template gebraucht habe, wäre es dumm gewesen, die jQuery Funktionen nicht zu nutzen.</p>
<p>Ich habe also die aktuelle jQuery Version <a href="http://docs.jquery.com/How_jQuery_Works#jQuery:_The_Basics">eingebunden</a> und mir dann kurz überlegt, was mein Script machen muss:</p>
<ol>
<li>Hol dir die Höhe der Sidebar und die Höhe des Contents</li>
<li>Vergleiche beide Werte und bilde das kleinste gemeinsame Vielfache (kgV)</li>
<li>Setze die Höhe der beiden DIVs auf das kgV</li>
</ol>
<h3>Die Umsetzung</h3>
<p>Soweit zur Theorie, kommen wir zur Praxis:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//sync height of Content and Sidebar</span>
<span style="color: #000066; font-weight: bold;">function</span> syncheight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">//Reset auf 'auto'</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#content'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'auto'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#sidebar'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'auto'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//hole aktuelle Werte</span>
	<span style="color: #000066; font-weight: bold;">var</span> contentheight <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#content'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> sidebarheight <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#sidebar'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> fullheight<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//vergleiche beide Hoehen, bilde kleines gemeinsames Vielfaches</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>contentheight<span style="color: #339933;">&gt;=</span>sidebarheight <span style="color: #339933;">||</span> contentheight<span style="color: #339933;">==</span>sidebarheight<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		fullheight <span style="color: #339933;">=</span> contentheight<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
		fullheight <span style="color: #339933;">=</span> sidebarheight<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//setze beide auf gleiche Hoehe</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#content'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span>fullheight<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#sidebar'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span>fullheight<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Das ist die ganze Funktion. <code>#content</code> und <code>#sidebar</code> stehen für die ID des Contents bzw. der Sidebar. Hinzu kam noch das Zurücksetzen der beiden Höhen auf den Wert <code>auto</code>. Das ist notwendig, will man später die Funktion in einem anderen JavaScript aufrufen. Möchte man, dass die Funktion automatisch aufgerufen wird, nachdem die Seite geladen ist, muss man die Funktion noch in eine <code>document.ready</code> &#8211; Funktion legen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">//hier die Funktion rein</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Durch diese Funktion wartet der Browser bis die Seite vollständig aufgebaut wurde und führt dann erst das Script aus.</p>
<h3>Demo</h3>
<div class="demolink"><a href="http://www.normansblog.de/demos/sync-sidebar-content-height/">Live Demo</a></div>
<p>Mein Problem war gelöst, mein Chef zufrieden und ich denke mal, dem einen oder anderen könnte die kleine Funktion auch helfen.</p>
<p>Viel Spaß wünsch ich damit <img src='http://www.normansblog.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.normansblog.de/when-css-is-not-enough/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
