<?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>Codecandies &#187; jquery</title>
	<atom:link href="http://codecandies.de/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://codecandies.de</link>
	<description>Das Weblog von Nico Brünjes.</description>
	<lastBuildDate>Sat, 27 Apr 2013 05:45:02 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title><![CDATA[Verlinkt: Building a jQuery Mobile Application]]></title>
		<link><![CDATA[http://miamicoder.com/2011/building-a-jquery-mobile-application-part-1/]]></link>
		<comments>http://codecandies.de/2012/01/23/building-a-jquery-mobile-application-part-1/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 09:33:51 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[jasmine]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=4553</guid>
		<description><![CDATA[Vierteiliges extended Tutorial, mit allen Schikanen: mobile jQuery, Testing mit Jasmine, vom Mockup bis zur fertigen Webapp.<p><a href="http://codecandies.de/2012/01/23/building-a-jquery-mobile-application-part-1/" rel="bookmark" title="Permanent link to 'Building a jQuery Mobile Application'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p>Vierteiliges <em>extended</em> Tutorial, mit allen Schikanen: mobile jQuery, Testing mit <a href="https://github.com/pivotal/jasmine/wiki">Jasmine</a>, vom Mockup bis zur fertigen Webapp. Via <a href="http://tthor.com/">tthor.com</a>.</p>
<p><a href="http://codecandies.de/2012/01/23/building-a-jquery-mobile-application-part-1/" rel="bookmark" title="Permanent link to 'Building a jQuery Mobile Application'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2012/01/23/building-a-jquery-mobile-application-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: jQuery Plugin: Scrollorama]]></title>
		<link><![CDATA[http://johnpolacek.github.com/scrollorama/]]></link>
		<comments>http://codecandies.de/2012/01/09/jquery-plugin-scrollorama/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 08:12:41 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=4369</guid>
		<description><![CDATA[John Polaceks effektreiches Plugin f&#252;r Scrollingseiten.<p><a href="http://codecandies.de/2012/01/09/jquery-plugin-scrollorama/" rel="bookmark" title="Permanent link to 'jQuery Plugin: Scrollorama'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p>John Polaceks effektreiches Plugin f&#252;r Scrollingseiten.</p>
<p><a href="http://codecandies.de/2012/01/09/jquery-plugin-scrollorama/" rel="bookmark" title="Permanent link to 'jQuery Plugin: Scrollorama'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2012/01/09/jquery-plugin-scrollorama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Touchbedienung in der Webapp</title>
		<link>http://codecandies.de/2010/12/01/touchbedienung-in-der-webapp/</link>
		<comments>http://codecandies.de/2010/12/01/touchbedienung-in-der-webapp/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 20:08:56 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3371</guid>
		<description><![CDATA[Die Touchbedienung ist einer der gro&#223;en Unterschied zwischen Tablet- und Desktopcomputer. Dieses Bedienkonzept, wie es der Nutzer inzwischen auch schon aus den sog. <em>nativen</em> Apps gelernt hat, so sinnvoll wie m&#246;glich umzusetzen und zu nutzen, sollte auf jeden Fall Teilaufgabe einer <em>HTML5-App</em> sein. Leider stehen der App im Browser nicht alle Schnitsstellen und F&#228;higkeiten zur Verf&#252;gung, die bei der Programmierung einer nativen App genutzt werden k&#246;nnen…]]></description>
				<content:encoded><![CDATA[<div class="foto"><img src="http://codecandies.de/wp-content/uploads/2010/12/bildergalerie.jpg" alt="Bildergalerie, iPad Version" title="Bildergalerie, iPad Version" width="620" height="420" class="alignnone size-full wp-image-3375" />
<p><a href="http://www.zeit.de/wissen/2010-11/fs-schnueffelratten-landminen">Bildergalerie bei ZEIT ONLINE</a>, Ansicht auf dem iPad</p>
</div>
<p>Die Touchbedienung ist einer der gro&#223;en Unterschied zwischen Tablet- und Desktopcomputer. Dieses Bedienkonzept, wie es der Nutzer inzwischen auch schon aus den sog. <em>nativen</em> Apps gelernt hat, so sinnvoll wie m&#246;glich umzusetzen und zu nutzen, sollte auf jeden Fall Teilaufgabe einer <em>HTML5-App</em> sein. Leider stehen der App im Browser nicht alle Schnitsstellen und F&#228;higkeiten zur Verf&#252;gung, die bei der Programmierung einer nativen App genutzt werden k&#246;nnen. Darauf kommt es aber allein auch nicht an, wie gesagt, es geht eben auch und vordringlich um das Bedienkonzepte.</p>
<p>Als <em>alten Hut</em> muss man zum Beispiel die Bedienung mit Kn&#246;pfen sehen, denn <em>Buttons</em> sind eben typischerweise Klickziele f&#252;r den Mauszeiger und weniger f&#252;r den Finger. Obwohl ein Button nat&#252;rlich auch in der Touchbedienung funktionieren kann; dann muss er aber gro&#223; und gut zu treffen sein, und auch noch erkennbar, wenn der Nutzer den Finger darauf legt. Trotzdem, ein Button zum Vor- und Zur&#252;ckbl&#228;ttern in einer Bildergalerie, ist nicht wirklich <em>tabletgem&#228;&#223;</em>.</p>
<p>Um es kurz zu machen: in einer <a href="http://www.zeit.de/wissen/2010-11/fs-schnueffelratten-landminen">Bildergalerie wie dieser hier</a> will der Nutzer <em>sliden</em> – mit dem Finger das Bild aus dem Viewport schieben – und nicht Kn&#246;pfe dr&#252;cken. In der Tabletversion haben wir das im Ansatz umgesetzt. Nutzt man die Seite mit dem iPad, kann man mit dem Finger von einem Bild zum n&#228;chsten navigieren. Da ich danach gefragt wurde, will ich kurz erkl&#228;ren wie das funktioniert (und danach auch noch dazu kommen, was noch verbessert werden muss).</p>
<p>Zun&#228;chst mal haben wir das Konzept der meisten Bildergalerien auf ZEIT ONLINE &#252;bernommen. Die bestehen zum Ladenzeitpunkt nur aus ihrem ersten Bild, die restlichen Bilder werden nachgeladen und versteckt horizontal rechts vom ersten Bild aufgereiht. Klickt man einen der Buttons wird der Container mit den Bildern einfach immer um Bildbreiter nach links oder rechts bewegt.</p>
<p>Die Bedienung durch die Buttons haben wir nur durch die Touchbedienung erweitert. Vielleicht sei kurz erw&#228;hnt wie Javascript einen solchen Touchevent sieht: es gibt die vier Events <code>touchstart</code>, <code>touchmove</code>, <code>touchend</code> und <code>touchcancel</code>. Die ersten drei laufen immer nacheinander ab, wobei touchmove solange wiederholt wird, wie man mit dem Finger &#252;ber die Touchoberfl&#228;che <em>slidet</em>. <code>touchcancel</code> tritt auf, wenn eine Touchaktion abgebrochen wird, bspw. wenn man mit dem Finger &#252;ber den Bildschirm hinaus geht. Die Events haben als Eigenschaften (man kennt das von Mouseevents) u.a. die Bildschirmkoordinaten, wo sie ausgel&#246;st wurden.</p>
<p>Damit l&#228;sst sich also leicht erkennen, ob zwischen <code>touchstart</code> und <code>touchend</code> eine Bewegung, also ein Swipe stattgefunden hat. Hier mein seht vereinfachtes, beispielhaftes jQuery-Plugin dazu (nur als Beispiel, nicht zur Implementation gedacht oder empfohlen):</p>
<pre class="brush: jscript; title: ; notranslate">
$.fn.addSomeTouch = function (options) {
	var xmoved = 0, xstart = 0;
	return this.each( function() {
		// touchstart event
		$( &quot;img&quot;, this ).bind( &quot;touchstart&quot;, function () {
			// jeder Finger ist ein Feld im Array
			// hier: 1-Finger-Geste
			if( event.touches.length == 1 ) {
				// Startpunkt merken
				xstart = event.touches[0].pageX; 
			}
		});
		
		// touchmove event
		$( &quot;img&quot;, this ).bind( &quot;touchmove&quot;, function () {
			// Bewegungsentfernung messen
			xmoved = event.touches[0].pageX - xstart;
		});
		
		// touchend event
		$( &quot;img&quot;, this ).bind( &quot;touchend&quot;, function () {
			// Limit f&#252;r Verz&#246;gerung
			if( xmoved &gt;= 50 ) {
				alert( &quot;I was touched and will move left.&quot; );
			} else if( xmoved &lt;= -50 ) {
				alert( &quot;I was touched and will move right.&quot; );
			}
			// Reset
			xstart = 0;
			xmoved = 0;
		});
		
		$( &quot;img&quot;, this ).bind( &quot;touchcancel&quot; , function() {
			// bei Abbruch zur&#252;cksetzen
			xstart = 0;
			xmoved = 0;
		});

	});
};
</pre>
<p>Wie gesagt, das ist kein Code f&#252;r den Produktionseinsatz.</p>
<p>Und was stimmt jetzt nicht? Nun, im Moment setze ich die Fingerbewgung nur als Schalterersatz ein. D.h., die Reaktion ist dieselbe, als w&#252;rde man auf den Links- oder Rechtsknopf dr&#252;cken, die ehrlicherweise ja auch noch da sind. Da bleibt ja noch Raum f&#252;r die Weiterentwicklung, denn so richtig <em>responsiv</em> ist das ja noch nicht.</p>
<p>Und am Schluss noch ein sch&#246;ner Link dazu: bei <a href="http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone">Touching and Gesturing on the iPhone</a>, gibt&#8217;s viele Grundlagen nachzulesen und das meiste gilt auch f&#252;r&#8217;s iPad.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/12/01/touchbedienung-in-der-webapp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript sch&#246;ner und schneller machen</title>
		<link>http://codecandies.de/2010/11/26/javascript-schoener-und-schneller-machen/</link>
		<comments>http://codecandies.de/2010/11/26/javascript-schoener-und-schneller-machen/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 11:27:35 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3361</guid>
		<description><![CDATA[Javascript ist, angesichts seiner <a href="http://en.wikipedia.org/wiki/JavaScript#History">etwas holprigen Entstehungsgeschichte</a> eine eigentlich recht elegante Scriptsprache. Es krankt jedoch daran, dass in Javascript im Grunde alles geht und alles gemacht wird und jedesmal anders. Beachtet man aber neben einem guten Stil in Javascript einige elementare Regeln, kann man seine Scripte dadurch auch noch merklich schneller und kompakter machen. Ein Acht-Punkte-Plan.]]></description>
				<content:encoded><![CDATA[<div class="foto"><img src="http://codecandies.de/wp-content/uploads/2010/11/aintbroke.jpg" alt="" title="Javascript sch&#246;ner und schneller machen" width="620" height="420" class="alignnone size-full wp-image-3366" /></div>
<p>Javascript ist, angesichts seiner <a href="http://en.wikipedia.org/wiki/JavaScript#History">etwas holprigen Entstehungsgeschichte</a> eine eigentlich recht elegante Scriptsprache. Es krankt jedoch daran, dass in Javascript im Grunde alles geht und alles gemacht wird und jedesmal anders. Will man mit Kollegen zusammen an einem Javascriptprojekt arbeiten, ist der eigene Dialekt ebenso hinderlich, wie mangelnde Sauberkeit beim Codeschreiben. Beachtet man aber neben einem guten Stil in Javascript einige elementare Regeln, kann man seine Scripte dadurch auch noch merklich schneller und kompakter machen.</p>
<h2>Coding Guidelines</h2>
<p>In Sachen Coding Guidelines gilt auf jeden Fall: jede Regel ist besser als keine Regel. In Javascript kann man viele b&#246;se Dinge schreiben, die kein Mensch versteht, die aber trotzdem hervorragend funktionieren. Die Sprache l&#228;sst einfach vieles zu, was trotzdem schlechter Stil ist. Vor kurzem haben sich die Entwickler von jQuery einen Styleguide verpasst, die <a href="http://docs.jquery.com/JQuery_Core_Style_Guidelines">JQuery Core Style Guidelines</a>, das ist schon eine wunderbare Grundlage. Einfach copy &amp; pasten.</p>
<p>Wichtig ist dabei auch, die Verwendung von <a href="http://jslint.com/">JS Lint</a> (<q>JSLint will hurt your feelings.</q>). Mit diesem Tool kann man die &#252;belsten Stylefehler vermeiden und die Einhaltung des Styleguides automatisiert &#252;berpr&#252;fen. <a href="http://www.jslint.com/lint.html">Die Einf&#252;hrung dazu</a> ist mehr als lesenswert. Besonders praktisch f&#252;r Nutzer von <a href="http://macromates.com/">Textmate</a> (<em>Lieblingseditor</em>) ist das <a href="http://andrewdupont.net/2006/10/01/javascript-tools-textmate-bundle/">JS Lint Bundle</a>.</p>
<h2>Codeverbesserung: erster Durchgang</h2>
<p>Sich aufzuraffen, seinen Code zu &#252;berarbeiten, ist nicht leicht. Aber: der Wille zur Verbesserung und das Wissen, dass der erste Aufschlag meist nicht optimal ist, trennt den Programmieren vom Scriptingguy, oder so. Hier ein paar schnelle und einfache Schritte, die Javascript schon deutlich verbessern. Federice Galassi hat dar&#252;ber eine <a href="http://www.slideshare.net/mobile/fgalassi/refactoring-to-unobtrusive-javascript">wunderbare Pr&#228;sentation</a> gemacht. Die Ma&#223;nahmen f&#252;hren aber nicht nur in Richtung <em>unobtrusiveness</em>, sondern sind auch geeignet, Javascript schneller und wartbarer zu machen. Kurz zusammengefasst:</p>
<ol>
<li>
<p>Entferne alles Inline-Javascript aus dem HTML-Code.</p>
<p>Also <code>&lt;script&gt; Code&hellip;&lt;/script&gt;</code> raus aus den Seiten und in eigene Dateien (besser eine eintige) packen. Diese dann mit <code>&lt;script src=&quot;datei.js&quot;&gt;&lt;/script&gt;</code> aufrufen. Und das am besten <strong>am Ende der Seite</strong>, direkt vor <code>&lt;/body&gt;</code>.</p>
</li>
<li>
<p>Alle Inlineevents aus dem HTML entfernen</p>
<p>Weg mit <code>&lt;a class=&quot;klick&quot; href=&quot;#&quot; onclick=&quot;foo();&quot;&gt;Klicken Sie hier&lt;/a&gt;</code>. Das kann besser machen. Mit jQuery beispielsweise: <code>$("a.klick" ).bind("click", function() { foo(); });</code>, jedenfalls aber in der externen Javascriptdatei.</p>
</li>
<li>
<p>Javascript-Pseudolinks entfernen</p>
<p>Mit Todesstrafe wird der uralte Javascript-Pseudolink bestraft! Sowas geht gar nicht: <code>&lt;a href=&quot;javascript:foo()&quot;&gt;Klicken Sie hier&lt;/a&gt;</code></p>
</li>
<li>
<p>CSS-Code aus dem Javascript entfernen.</p>
<p>Innerhalb des Javascriptes sollte kein CSS verwendet werden (Trennung von Pr&#228;sentation und Programmierlogik). D.h. sowohl Zuweisungen wie <code>$("a" ).css("background","#ff0000" );</code> oder auch <code>document.getElementById("id").style.color("#ff0000");</code>	und &#228;hnliches schreiben teilweise lange un&#252;berschaubare style-Attribute in den HTML-Code und produzieren DOM-Zugriffe. Stattdessen schreibt man die CSS-Anweisungen in eine CSS-Datei</p>
<pre class="brush: css; title: ; notranslate">
// bspw. base.css
a.rot {
	background: #ff0000;
}
</pre>
<p>und nutzt im Javascript</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;a&quot;).addClass(&quot;rot&quot;); // Farbe an
$(&quot;a&quot;).removeClass(&quot;rot&quot;); // Farbe aus, oder gleich:
$(&quot;a&quot;).toggleClass(&quot;rot&quot;); // je nach dem
</pre>
<p><q>CSS bewegt sich wesentlich schneller und gewandter durch das DOM als Javascript.</q></p>
</li>
<li>
<p>Businesslogik aus dem Javascript entfernen (Client-Server-Anwendungen).</p>
<p>Bei Client-Server-Anwendungen kann es einen entscheidenen Geschwindigkeitsvorteil bedeuten, komplizierte Berechnungen nicht auf dem Client (also mit Javascript) sondern auf dem Server auszuf&#252;hren. Wenn man sich also schon Daten vom Server holt, dann sollte man vermeiden mit diesen Daten Berechnungen auf dem Client auszuf&#252;hren. Ein Beispiel:</p>
<pre class="brush: jscript; title: ; notranslate">		
// Schlecht!
$.get(&quot;action.php&quot;, function ( data ) {
    if ( data ) {
        if ( data.kontostand &gt; data.dispokredit ) {
            alert(&quot;Konto &#252;berzogen&quot; );
        }
    }
});

// Besser!
$.get(&quot;action.php?dispoberechnung&quot;, {konto:&quot;123456&quot;}, function ( data ) {
    if ( data.dispo === false ) {
        alert(&quot;Konto &#252;berzogen&quot; );
    }
}
</pre>
</li>
<li>
<p>DOM-Operationen auf ein Minimum beschr&#228;nken!</p>
<p>Nicolas Zakas formuliert es in <a href="http://www.amazon.de/gp/product/059680279X?ie=UTF8&amp;tag=couchblogorg-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=059680279X">High Performance JavaScript (Build Faster Web Application Interfaces)</a><img src="http://www.assoc-amazon.de/e/ir?t=couchblogorg-21&amp;l=as2&amp;o=3&amp;a=059680279X" width="1" height="1" border="0" alt="" style="display:inline !important;border:none !important; margin:0px !important;" /> so:</p>
<blockquote><p>An excellent analogy is to think of DOM as a piece of land and JavaScript (meaning ECMAScript) as another piece of land, both connected with a toll bridge (see John Hrvatin, Microsoft, MIX09,  http://videos.visitmix.com/MIX09/T53F ). Every time your ECMAScript needs access to the DOM, you have to cross this bridge and pay the performance toll fee. The more you work with the DOM, the more you pay. So the general recommendation is to cross that bridge as few times as possible and strive to stay in ECMAScript land.</p>
</blockquote>
<p>Daraus ergibt sich eine klare Anweisung: greife sowenig wie es eben geht auf das DOM zu.</p>
<p>Ein Domzugriff ist dann gegeben, wenn ein DOM-Element erschafft, ins DOM einh&#228;ngt, ein Element im DOM verschiebt, Attribute hinzuf&#252;gt und so weiter und so fort. Am allerschlimmsten sind die sogenannte HTML-Coolections und das iterieren hierauf.</p>
<pre class="brush: jscript; title: ; notranslate">
// ein ganz b&#246;ses Beispiel!
function innerHTMLLoop () {
    for ( var i = 0; i &lt; 15000; i++ ) {
        document.getElementById(&quot;meinLink&quot; ).innerHTML +=&quot;a&quot;;
    }
}
</pre>
<p>Hier erleben wir schlappen 15000 DOM-Aufrufe der &#252;belsten Art. Stattdessen vermeidet man solange wie m&#246;glich den Zugriff aufs DOM:</15000></p>
<pre class="brush: jscript; title: ; notranslate">
// dann besser so
function innerHTMLLoop2 () {
    var content =&quot;&quot;;
    for ( var i = 0; i &lt; 15000; i++ ) {
        content +=&quot;a&quot;;
    }
    document.getElementById(&quot;meinLink&quot; ).innerHTML += content;
}
</pre>
<p><strong>Goldene Regel: pro Funktion sollte es nur einen Zugriff auf den DOM geben.</strong> So kann es beispielsweise Sinn machen, sehr lange auf Strings mit HTML zu arbeiten und erst am Ende alles zusammen per  <code>$( var ).appendTo( 'body' );</code> ins DOM zu h&#228;ngen. Ausser in Chrome und Safari ist es sogar noch schneller <code>innerHTML</code> zu benutzen, in jQuery <code>$("#meinKram" ).html( var );</code>. Hier scheiden sich allerdings die Geister, weil innerHTML nicht standardkonform ist, wohl aber von jedem Browser unterst&#252;tzt wird.</p0>
	</li>
<li>
<p>Gro&#223;e HTML-Chunks ggf. durch Templates ersetzen.</p>
<p>Wegen der schon oft angesprochenen Trennung von Content und Pr&#228;sentationslogik ist zu &#252;berlegen, ob man f&#252;r gro&#223;e HTML-St&#252;cke die man in den Code einspeisen muss, vielleicht besser HTML-Templates verwendet, den Code also in externe Dateien auslagert und nachl&#228;dt (auf welche Weise auch immer). Als Vorstufe dazu und Kompromiss kann man auch bis mittelgro&#223;e Codeschnipsel im verborgenen Teilen des HTML-Dokuments unterbringen und sich dann per .clone() oder wieder .html() einlesen und wiederverwenden.</p>
<p>Die Verwendung eines Templatesystems setzt aber bspw. wieder ein eingenes Plugin voraus, Schnipsel im HTML verursachen beim Laden wieder DOM-Zugriffe. Hier muss man genau abwiegen, was der Performance hier zutr&#228;glich ist, sicherlich auch in Abh&#228;ngigkeit vom der Gr&#246;&#223;e des HTML-Codes der ben&#246;tigt wird.</p>
</li>
<li>
<p>Keine/wenig globalen Variablen nutzen!</p>
<p>Variablen die ausserhalb von Funktionen definiert werden, sind, auch wenn sie mit var geschrieben werden, globale Variablen, die im window-Namensraum gespeichert werden. Es besteht die Gefahr, dass diese an anderer Stelle ungewollt &#252;berschrieben werden, au&#223;erdem ist der Zugriff auf window langsam. Stattdessen speichert man Variablen aus dem Window-Namensraum in lokalen Variablen zwischen, auf die der Zugriff wesentlich schneller erfolgt.</p>
</li>
</ol>
<h2>Fortsetzung folgt</h2>
<p>Dieser 8-Punkte-Plan ist aber nur ein Einstieg. Wenn man ein Programm so optimiert hat, kann man praktisch direkt wieder von vorne anfangen und weitere Verbesserungen einbringen. Das wird dann das Thema eines weiteren Artikels hier.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/11/26/javascript-schoener-und-schneller-machen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Make Your Own Custom jQuery Selector]]></title>
		<link><![CDATA[http://blogs.sitepoint.com/2010/11/16/make-your-own-custom-jquery-selector/]]></link>
		<comments>http://codecandies.de/2010/11/19/make-your-own-custom-jquery-selector/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 22:09:15 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3356</guid>
		<description><![CDATA[If you find yourself with a lengthy condition to get a Boolean, or your true/false Boolean is showing up again…<p><a href="http://codecandies.de/2010/11/19/make-your-own-custom-jquery-selector/" rel="bookmark" title="Permanent link to 'Make Your Own Custom jQuery Selector'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<blockquote><p>If you find yourself with a lengthy condition to get a Boolean, or your true/false Boolean is showing up again and again, you might be on target to create a custom expression for your selector. <a href="http://blogs.sitepoint.com/2010/11/16/make-your-own-custom-jquery-selector/">And making them could hardly be easier…</a></p>
</blockquote>
<p><a href="http://codecandies.de/2010/11/19/make-your-own-custom-jquery-selector/" rel="bookmark" title="Permanent link to 'Make Your Own Custom jQuery Selector'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/11/19/make-your-own-custom-jquery-selector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Mit Opera einen HTML5-Videoplayer bauen]]></title>
		<link><![CDATA[http://dev.opera.com/articles/view/custom-html5-video-player-with-css3-and-jquery/]]></link>
		<comments>http://codecandies.de/2010/08/03/mit-opera-einen-html5-videoplayer-bauen/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 09:01:41 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3285</guid>
		<description><![CDATA[in den Browser eingebauten Players abzuspielen. Dieser Fakt ist ja nun inzwischen hinreichend bekannt. Auch schon geh&#246;rt hat man davon,…<p><a href="http://codecandies.de/2010/08/03/mit-opera-einen-html5-videoplayer-bauen/" rel="bookmark" title="Permanent link to 'Mit Opera einen HTML5-Videoplayer bauen'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p>in den Browser eingebauten Players abzuspielen. Dieser Fakt ist ja nun inzwischen hinreichend bekannt. Auch schon geh&#246;rt hat man davon, dass man diesen Videoplayer selbst gestalten kann, also eigene Buttons, Seekbar und Controls hinzuf&#252;gen kann. Aber wie genau macht man das?</p>
<p>Bei Opera gibt es genau zu dieser Frage nun ein ausf&#252;hrliches Tutorial: <a href="http://dev.opera.com/articles/view/custom-html5-video-player-with-css3-and-jquery/">Building a custom HTML5 video player with CSS3 and jQuery</a>. Ganz gro&#223;es Kino.</p>
<p><a href="http://codecandies.de/2010/08/03/mit-opera-einen-html5-videoplayer-bauen/" rel="bookmark" title="Permanent link to 'Mit Opera einen HTML5-Videoplayer bauen'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/08/03/mit-opera-einen-html5-videoplayer-bauen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sprite up the web</title>
		<link>http://codecandies.de/2010/07/30/sprite-up-the-web/</link>
		<comments>http://codecandies.de/2010/07/30/sprite-up-the-web/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 07:24:56 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3279</guid>
		<description><![CDATA[Unter dem klanghaften Motto »Sprite up the web« finden wir das Spritely jQuery Plugin, das angetreten ist, die Webseitenwelt mit…]]></description>
				<content:encoded><![CDATA[<p>Unter dem klanghaften Motto »<a href="http://spritely.net/" hreflang="en">Sprite up the web</a>« finden wir das <strong>Spritely jQuery Plugin</strong>, das angetreten ist, die Webseitenwelt mit Spriteanimation ein wenig h&#252;bscher zu machen. Und wirklich, dass was wir auf der Seite sehen, und auch <a href="http://www.munkyonline.com/" title="Man achte auf die Kaffeetasse" hreflang="en">einige</a> der <a href="http://www.alyssacose.com/" hreflang="en">Beispiele</a> aus der <a href="http://spritely.net/gallery/" hreflang="en">Early Adopter Gallery</a>, machen wirklich Spass.</p>
<div class="foto"><img src="http://codecandies.de/wp-content/uploads/2010/07/spritely-620x230.png" alt="" title="spritely" width="620" height="230" class="alignnone size-medium wp-image-3280" /></div>
<p>Das Plugin stellt zwei Methoden zur Ver&#252;gung, und zwar <code>sprite()</code>, mit der Elemente aus Einzelbildern animiert werden k&#246;nne, und <code>pan()</code>, mit der (mehrere) Endloshintergrundbilder animiert verschoben werden k&#246;nnen. Das alles soll in den Browsern IE6+, Firefox, Safari, Chrome und Opera funktionieren und au&#223;erdem einen angepassten Modus f&#252;r iPhone, Android und iPad haben. Bitte sch&#246;n: alles nat&#252;rlich <strong>ohne Flash</strong>, Silverlight oder sonstigen Rotz.</p>
<p>EDerzeit liegt <strong>Spritely</strong> in <a href="http://spritely.net/download/" title="Download" hreflang="en">Version 0.2</a> vor, es ist also noch Entwicklungsluft nach oben, aber das sieht alles schon ganz brauchbar aus. Bitte testen.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/07/30/sprite-up-the-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Geolocation im Browser erkennen</title>
		<link>http://codecandies.de/2010/02/12/geolocation-im-browser-erkennen/</link>
		<comments>http://codecandies.de/2010/02/12/geolocation-im-browser-erkennen/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 21:21:58 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2774</guid>
		<description><![CDATA[Heute wollte mir jemand weissmachen, zum Nutzen der Geolocation-Informationen des iPhones br&#228;uchte man eine App. Quatsch. Seit iPhone 3.0 geht…]]></description>
				<content:encoded><![CDATA[<p>Heute wollte mir jemand weissmachen, zum Nutzen der Geolocation-Informationen des iPhones br&#228;uchte man eine App. Quatsch.</p>
<p>Seit iPhone 3.0 <a href="http://mapscripting.com/how-to-use-geolocation-in-mobile-safari">geht im Safari</a>:</p>
<pre><code>navigator.geolocation.getCurrentPosition(foundLocation(position){^
	var lat = position.coords.latitude;
	var long = position.coords.longitude;
	alert('Found location: ' + lat + ', ' + long);
}, noLocation(){
	alert('Could not find location');
});</code></pre>
<p>Weil ich die veraltete Information aber auch gerade nochmal in einem Buch gelesen habe und dort beinahe ausschlie&#223;lich auf jQuery gesetzt wird: es gibt nat&#252;rlich auch ein entsprechendes jQuery-Plugin: <a href="http://code.google.com/p/jquery-geolocation/">jquery-geolocation</a>. Die ist kompatibel zum Safari/iPhone ab Version 3.0 und Firefox ab 3.5.</p>
<pre><code>$.geolocation.find(function(location){
   alert(location.latitude+", "+location.longitude);
}, function(){
   alert("Your device doesn't support jquery.geolocation.js");
});</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/02/12/geolocation-im-browser-erkennen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 1.4: Funktionen &#252;bergeben beim Setting</title>
		<link>http://codecandies.de/2010/01/18/jquery-1-4-funktionen-uebergeben-beim-setting/</link>
		<comments>http://codecandies.de/2010/01/18/jquery-1-4-funktionen-uebergeben-beim-setting/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 13:57:51 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2682</guid>
		<description><![CDATA[Was offenbar (also an mir ist das irgendwie vorr&#252;ber gegangen) f&#252;r .attr() schon l&#228;nger funktioniert, wurde beim neuen jQuery 1.4…]]></description>
				<content:encoded><![CDATA[<p>Was offenbar (also an mir ist das irgendwie vorr&#252;ber gegangen) f&#252;r <code>.attr()</code> schon l&#228;nger funktioniert, wurde beim neuen jQuery 1.4 nun f&#252;r alle Settingfunktion m&#246;glich gemacht: das &#220;bergeben von Funktionen zum Setzen eines Wertes. Namentlich funktioniert das nun also bei: <code>.css()</code>, <code>.attr()</code>, <code>.val()</code>, <code>.html()</code>, <code>.text()</code>, <code>.append()</code>, <code>.prepend()</code>, <code>.before()</code>, <code>.after()</code>, <code>.replaceWith()</code>, <code>.wrap()</code>, <code>.wrapInner()</code>, <code>.offset()</code>, <code>.addClass()</code>, <code>.removeClass()</code> und <code>.toggleClass()</code>.</p>
<p><span id="more-2682"></span></p>
<p>Bei <code>.css()</code>, <code>.attr()</code>, <code>.val()</code>, <code>.html()</code>, <code>.text()</code>, <code>.append()</code>, <code>.prepend()</code>, <code>.offset()</code>, <code>.addClass()</code>, <code>.removeClass()</code> und <code>.toggleClass()</code> wird zus&#228;tzlich als zweiter Parameter den momentane Inhalt an die Funktion &#252;bergeben. Dann geht sowas slickes:</p>
<pre><code>// find all ampersands in A's and wrap with a span
$('a').html(function(i,html){
  return html.replace(/&amp;amp;/gi,'&lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;');
});</code></pre>
<p>Da tanzen die Coder unter uns doch gleich im Sonnenschein.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/01/18/jquery-1-4-funktionen-uebergeben-beim-setting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 1.4 und die neue API-Dokumentation</title>
		<link>http://codecandies.de/2010/01/15/jquery-1-4-und-die-neue-api-dokumentation/</link>
		<comments>http://codecandies.de/2010/01/15/jquery-1-4-und-die-neue-api-dokumentation/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 09:37:05 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2679</guid>
		<description><![CDATA[Zusammen mit der Ver&#246;ffentlichung von jQuery 1.4 wurde die jQuery-Dokumentation neu geschrieben und unter neue Adresse http://api.jquery.com/ ver&#246;ffentlicht. Dort findet…]]></description>
				<content:encoded><![CDATA[<p>Zusammen mit der Ver&#246;ffentlichung von <a href="http://jquery14.com/day-01/jquery-14">jQuery 1.4</a> wurde die jQuery-Dokumentation neu geschrieben und unter neue Adresse <a href="http://api.jquery.com/">http://api.jquery.com/</a> ver&#246;ffentlicht. Dort findet man ab sofort eine Liste aller jQuery-Methoden, Selektoren und Eigenschaften. Diese widerum sind dann, jeweils unter einem eigenen URI, wie bspw. <a href="http://api.jquery.com/html">http://api.jquery.com/html</a> oder <a href="http://api.jquery.com/bind">http://api.jquery.com/bind</a> ausgiebig dokumentiert. Dort ist auch die Versionsgeschichte bis jQuery 1.0 zur&#252;ck zu finden.</p>
<p><span id="more-2679"></span></p>
<p>Das Backend (und jetzt kommt&#8217;s) beruht nicht mehr auf MediaWiki, sondern auf WordPress (wtf?), trotzdem verspricht man sich ein Performancesteigerung. Cool ist allerdings, dass es die komplette API auch als <a href="http://api.jquery.com/api/">XML-Dump</a> gibt, damit man sie anderenorts, bspw. in Widgets, auf der eigenen Seite oder in Apps weiterverwenden kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/01/15/jquery-1-4-und-die-neue-api-dokumentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: jQuery Masonry]]></title>
		<link><![CDATA[http://desandro.com/resources/jquery-masonry]]></link>
		<comments>http://codecandies.de/2009/12/08/jquery-masonry/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 12:32:08 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2576</guid>
		<description><![CDATA[Masonry is a layout plugin for jQuery. Think of it as the flip side of CSS floats. Whereas floating arranges…<p><a href="http://codecandies.de/2009/12/08/jquery-masonry/" rel="bookmark" title="Permanent link to 'jQuery Masonry'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p>Masonry is a layout plugin for jQuery. Think of it as the flip side of CSS floats. Whereas floating arranges elements horizontally then vertically, Masonry arranges elements vertically then horizontally according to a grid.</p>
<p><a href="http://codecandies.de/2009/12/08/jquery-masonry/" rel="bookmark" title="Permanent link to 'jQuery Masonry'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/12/08/jquery-masonry/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: jQSlickWrap]]></title>
		<link><![CDATA[http://jwf.us/projects/jQSlickWrap/]]></link>
		<comments>http://codecandies.de/2009/11/23/jqslickwrap/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 11:46:43 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2470</guid>
		<description><![CDATA[jQSlickWrap is a plugin for jQuery which enables you to easily and accurately wrap your text around the content of…<p><a href="http://codecandies.de/2009/11/23/jqslickwrap/" rel="bookmark" title="Permanent link to 'jQSlickWrap'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p><q>jQSlickWrap  is a plugin for jQuery which enables you to easily and accurately wrap your text around the content of floated images.</q> Nutzt HTML5-Canvas.</p>
<p><a href="http://codecandies.de/2009/11/23/jqslickwrap/" rel="bookmark" title="Permanent link to 'jQSlickWrap'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/11/23/jqslickwrap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Making an Interactive Picture with jQuery]]></title>
		<link><![CDATA[http://buildinternet.com/2009/11/making-an-interactive-picture-with-jquery/]]></link>
		<comments>http://codecandies.de/2009/11/21/making-an-interactive-picture-with-jquery/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 08:07:15 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2452</guid>
		<description><![CDATA[Great tutorial [that] will be showing you how to piece together an interactive picture – aka an image that contains…<p><a href="http://codecandies.de/2009/11/21/making-an-interactive-picture-with-jquery/" rel="bookmark" title="Permanent link to 'Making an Interactive Picture with jQuery'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p>Great <q>tutorial [that] will be showing you how to piece together an interactive picture – aka an image that contains tooltips and popup boxes.</q></p>
<p><a href="http://codecandies.de/2009/11/21/making-an-interactive-picture-with-jquery/" rel="bookmark" title="Permanent link to 'Making an Interactive Picture with jQuery'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/11/21/making-an-interactive-picture-with-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: jQuery Anti-Patterns…]]></title>
		<link><![CDATA[http://www.slideshare.net/paul.irish/perfcompression]]></link>
		<comments>http://codecandies.de/2009/10/25/jquery-anti-patterns/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 09:37:11 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2392</guid>
		<description><![CDATA[»jQuery Anti-Patterns for Performance &#38; Compression«, Pr&#228;sentation von Paul Irish. →<p><a href="http://codecandies.de/2009/10/25/jquery-anti-patterns/" rel="bookmark" title="Permanent link to 'jQuery Anti-Patterns…'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p>»jQuery Anti-Patterns for Performance &amp; Compression«, Pr&#228;sentation von Paul Irish.</p>
<p><a href="http://codecandies.de/2009/10/25/jquery-anti-patterns/" rel="bookmark" title="Permanent link to 'jQuery Anti-Patterns…'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/10/25/jquery-anti-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: jQuery Plugin intoViewport]]></title>
		<link><![CDATA[http://bernhardhaeussner.de/blog/82_jQuery_Plugin_intoViewport]]></link>
		<comments>http://codecandies.de/2009/08/05/jquery-plugin-intoviewport/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 17:21:41 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2262</guid>
		<description><![CDATA[Das Plugin intoViewport erledigt als Erweiterung zu der popul&#228;ren Javascript-Bibliothek jQuery das scrollen bestimmter HTML-Elemente einer Webseite in den Sichtbereich…<p><a href="http://codecandies.de/2009/08/05/jquery-plugin-intoviewport/" rel="bookmark" title="Permanent link to 'jQuery Plugin intoViewport'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p><q>Das Plugin intoViewport erledigt als Erweiterung zu der popul&#228;ren Javascript-Bibliothek jQuery das scrollen bestimmter HTML-Elemente einer Webseite in den Sichtbereich des Browsers, aber nur wenn n&#246;tig und nur so weit wie n&#246;tig.</q></p>
<p><a href="http://codecandies.de/2009/08/05/jquery-plugin-intoviewport/" rel="bookmark" title="Permanent link to 'jQuery Plugin intoViewport'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/08/05/jquery-plugin-intoviewport/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Extending jQuery’s selector capabilities]]></title>
		<link><![CDATA[http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/]]></link>
		<comments>http://codecandies.de/2009/08/04/extending-jquerys-selector-capabilities/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 15:25:26 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2249</guid>
		<description><![CDATA[I’m sure you all know that it’s possible to create plugins and extend various aspects of the jQuery JavaScript library…<p><a href="http://codecandies.de/2009/08/04/extending-jquerys-selector-capabilities/" rel="bookmark" title="Permanent link to 'Extending jQuery’s selector capabilities'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p><q>I’m sure you all know that it’s possible to create plugins and extend various aspects of the jQuery JavaScript library but did you know you could also extend the capabilities of it’s selector engine?</q></p>
<p><a href="http://codecandies.de/2009/08/04/extending-jquerys-selector-capabilities/" rel="bookmark" title="Permanent link to 'Extending jQuery’s selector capabilities'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/08/04/extending-jquerys-selector-capabilities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Reinventing a Drop Down with CSS and jQuery]]></title>
		<link><![CDATA[http://www.jankoatwarpspeed.com/post/2009/07/28/reinventing-drop-down-with-css-jquery.aspx]]></link>
		<comments>http://codecandies.de/2009/07/30/reinventing-a-drop-down-with-css-and-jquery/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 10:58:27 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2232</guid>
		<description><![CDATA[For me, standard HTML Select element is pretty much annoying. It&#8217;s ugly. It can&#8217;t be styled properly in Internet Explorer.…<p><a href="http://codecandies.de/2009/07/30/reinventing-a-drop-down-with-css-and-jquery/" rel="bookmark" title="Permanent link to 'Reinventing a Drop Down with CSS and jQuery'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p><q>For me, standard HTML Select element is pretty much annoying. It&#8217;s ugly. It can&#8217;t be styled properly in Internet Explorer. And it can&#8217;t contain nothing but simple text. That is the reason why I needed to reinvent Drop Down element. This tutorial shows how to do that (easily, believe it or not).</q></p>
<p><a href="http://codecandies.de/2009/07/30/reinventing-a-drop-down-with-css-and-jquery/" rel="bookmark" title="Permanent link to 'Reinventing a Drop Down with CSS and jQuery'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/07/30/reinventing-a-drop-down-with-css-and-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chroma Hash</title>
		<link>http://codecandies.de/2009/07/30/chroma-hash/</link>
		<comments>http://codecandies.de/2009/07/30/chroma-hash/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 07:37:20 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/2009/07/30/chroma-hash/</guid>
		<description><![CDATA[In bin mir ja bewusst, dass es strunzlangweilig ist, wenn ich w&#246;chentlich hier einen Link auf ein jQuery-Plugin setze und…]]></description>
				<content:encoded><![CDATA[<p>In bin mir ja bewusst, dass es strunzlangweilig ist, wenn ich w&#246;chentlich hier einen Link auf ein jQuery-Plugin setze und dabei regelm&#228;&#223;ig betonen muss, wie knarzgeil jQuery ist, was f&#252;r wundervolle Programmierideen damit schon verwirklicht wurden und: dass es immer noch besser wird.</p>
<p>Trotzdem. <a href="http://mattt.github.com/Chroma-Hash/">Chroma Hash</a> (via <a href="http://ajaxian.com/archives/chroma-hash-interesting-visualization-of-your-password">Ajaxian</a>) ist wieder so eine Programmier- <em>slash</em> Designidee, da muss man einfach frohlocken. Los geht&#8217;s. Folgende Problemstellung: beim Registrieren f&#252;r eine Website muss der User zweimal sein gew&#252;nschtes Passwort eingeben, wie &#252;blich verdeckt durch Sternchen/Bullets. Vertippt man sich, muss man nach dem Abschicken des Formulars nochmal beide Passw&#246;rter eingeben. Und so fort. Chroma Hash macht aus den Eingaben einen MD5-Hash (der sich nicht zur&#252;ckrechnen l&#228;sst) und daraus widerum kleine Farbbalken. Womit man sofort visuell erfassen kann (im Grunde schon beim Tippen), ob man in beide Felder das gleiche eingetragen hat.</p>
<p>Ja, das ist ein relatives kleines Usability-Gimmick, aber ein wirklich nettes. Einfach mal ausprobieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/07/30/chroma-hash/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Colorbox</title>
		<link>http://codecandies.de/2009/07/16/colorbox/</link>
		<comments>http://codecandies.de/2009/07/16/colorbox/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 07:46:37 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2211</guid>
		<description><![CDATA[Light- bzw Thickboxen gibt es ja inzwischen wie Sand am Meer, Colorbox allerdings bietet einige sehr interessante Features und man…]]></description>
				<content:encoded><![CDATA[<p>Light- bzw Thickboxen gibt es ja inzwischen wie Sand am Meer, <a href="http://colorpowered.com/colorbox/">Colorbox</a> allerdings  bietet einige sehr interessante Features und man merkt deutlich, dass sich auf dem Gebiet viel getan hat. Zun&#228;chst mal ist sie &#252;ber Aufrufparameter komfortabel zu steuern (was eigentlich f&#252;r jedes jQuery-Plugin gelten sollte), verschiedene Effekte und Ausf&#252;hrungen (inkl. Bilderpreload und Slideshow) sind w&#228;hlbar und f&#252;r den fortgeschrittenen Einsatz bietet sie eine Reihe von <em>Event Hooks</em>, um Callbacks unterzubringen. Bisher die beste <em>Light</em>box, die mir &#252;ber den Weg gelaufen ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/07/16/colorbox/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: jQuery Visualize Plugin]]></title>
		<link><![CDATA[http://www.filamentgroup.com/lab/jquery_visualize_plugin_accessible_charts_graphs_from_tables_html5_canvas/]]></link>
		<comments>http://codecandies.de/2009/07/09/jquery-visualize-plugin/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 19:29:58 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2192</guid>
		<description><![CDATA[[A] technique we came up with to use JavaScript to scrape data from an HTML table and generate charts using…<p><a href="http://codecandies.de/2009/07/09/jquery-visualize-plugin/" rel="bookmark" title="Permanent link to 'jQuery Visualize Plugin'" class="glyph">→</a></p>
]]></description>
				<content:encoded><![CDATA[<p><q>[A] technique we came up with to use JavaScript to scrape data from an HTML table and generate charts using the HTML 5 Canvas element.</q></p>
<p><a href="http://codecandies.de/2009/07/09/jquery-visualize-plugin/" rel="bookmark" title="Permanent link to 'jQuery Visualize Plugin'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/07/09/jquery-visualize-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
