<?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>BorkWeb &#187; javascript</title>
	<atom:link href="http://borkweb.com/story/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://borkweb.com</link>
	<description>Some People Are Squirrel Handed.</description>
	<lastBuildDate>Tue, 17 Jan 2012 22:00:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Web Programming Guest Lecture: JavaScript</title>
		<link>http://borkweb.com/story/web-programming-guest-lecture-javascript</link>
		<comments>http://borkweb.com/story/web-programming-guest-lecture-javascript#comments</comments>
		<pubDate>Mon, 07 Dec 2009 21:37:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[dougless crockford]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[plymouth state]]></category>
		<category><![CDATA[psu]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/web-programming-guest-lecture-javascript</guid>
		<description><![CDATA[I have once again given a JavaScript guest lecture to Zach&#8216;s Web Programming class. This year I have taken the liberty of swiping some of Douglas Crockford&#8217;s &#8220;JavaScript: The Good Parts&#8221; presentation for the leading slides. Here&#8217;s the presentation: Javascript 2009 View more presentations from borkweb.]]></description>
			<content:encoded><![CDATA[<p>I have once again given a JavaScript guest lecture to <a href="http://nosheep.net">Zach</a>&#8216;s Web Programming class.  This year I have taken the liberty of swiping some of Douglas Crockford&#8217;s &#8220;<a href="http://googlecode.blogspot.com/2009/03/doug-crockford-javascript-good-parts.html">JavaScript: The Good Parts</a>&#8221; presentation for the leading slides.</p>
<p>Here&#8217;s the presentation:</p>
<div style="width:425px;text-align:left" id="__ss_2668223"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/borkweb/javascript-2009" title="Javascript 2009">Javascript 2009</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=javascript2009-091207131734-phpapp01&#038;stripped_title=javascript-2009" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=javascript2009-091207131734-phpapp01&#038;stripped_title=javascript-2009" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/borkweb">borkweb</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/web-programming-guest-lecture-javascript/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Guest Lecture: JavaScript, Ajax &amp; DOM Manipulation</title>
		<link>http://borkweb.com/story/guest-lecture-javascript-ajax-dom-manipulation</link>
		<comments>http://borkweb.com/story/guest-lecture-javascript-ajax-dom-manipulation#comments</comments>
		<pubDate>Wed, 03 Dec 2008 19:16:52 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[plymouth]]></category>
		<category><![CDATA[plymouth state university]]></category>
		<category><![CDATA[psu]]></category>

		<guid isPermaLink="false">http://borkweb.com/?p=656</guid>
		<description><![CDATA[Zach has asked me to give a JavaScript guest lecture in his Web Programming class. We&#8217;ll cover: JS basics, node manipulation, DOM traversal, AJAX, JavaScript libraries, and myPlymouth implementations of those topics. Here are the slides (get the .ppt here): Javascript: Ajax &#38; DOM Manipulation v1.2 View SlideShare presentation or Upload your own. (tags: javascript [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nosheep.net">Zach</a> has asked me to give a JavaScript guest lecture in his Web Programming class.  We&#8217;ll cover: JS basics, node manipulation, DOM traversal, AJAX, JavaScript libraries, and myPlymouth implementations of those topics.  Here are the slides (get the .ppt <a href="http://borkweb.com/examples/js_workshop/javascript.ppt">here</a>):</p>
<div class="center">
<div style="width:425px;text-align:left" id="__ss_814300"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/borkweb/javascript-ajax-and-the-dom-v12-presentation?type=powerpoint" title="Javascript: Ajax &amp; DOM Manipulation v1.2">Javascript: Ajax &amp; DOM Manipulation v1.2</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=javascript-1228331371388010-8&#038;stripped_title=javascript-ajax-and-the-dom-v12-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=javascript-1228331371388010-8&#038;stripped_title=javascript-ajax-and-the-dom-v12-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/borkweb/javascript-ajax-and-the-dom-v12-presentation?type=powerpoint" title="View Javascript: Ajax &amp; DOM Manipulation v1.2 on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/javascript">javascript</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/jquery">jquery</a>)</div>
</div>
</div>
<p>A few resources that are mentioned:</p>
<ul>
<li><a href="http://borkweb.com/story/must-have-extensions-for-firefox">Firefox Extensions</a> (including <a href="http://getfirebug.com">Firebug</a>)</li>
<li><a href="http://jquery.com">jQuery</a></li>
<li><a href="http://borkweb.com/examples/js_workshop/">Slide Examples</a></li>
<li><a href="http://borkweb.com/playground/sprite/sprite.html">MegaMan Sprite Animation</a></li>
</ul>
<p><em>Note: this is an updated talk on the <a href="http://borkweb.com/story/plymouth-state-javascript-workshop">workshop</a> I led two years ago</em></p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/guest-lecture-javascript-ajax-dom-manipulation/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Luminis: Forcing CSS/JavaScript Updates to Clients</title>
		<link>http://borkweb.com/story/luminis-forcing-cssjavascript-updates-to-clients</link>
		<comments>http://borkweb.com/story/luminis-forcing-cssjavascript-updates-to-clients#comments</comments>
		<pubDate>Mon, 02 Jun 2008 17:42:08 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[luminis]]></category>
		<category><![CDATA[portal]]></category>
		<category><![CDATA[summit]]></category>
		<category><![CDATA[sungard]]></category>
		<category><![CDATA[sungardhe]]></category>

		<guid isPermaLink="false">http://borkweb.com/?p=553</guid>
		<description><![CDATA[[[innerindex]] Introduction I gave a talk at SunGard Summit in Anaheim this spring on Plymouth State&#8216;s portal (myPlymouth). There were a number of really great questions that came up following my presentation, one of which is the topic of this post: &#8220;How do you force a client&#8217;s browser to always use the correct version of [...]]]></description>
			<content:encoded><![CDATA[<p>[[innerindex]]<br />
<h2 id="553_introduction_1" >Introduction</h2>
<p>I gave a talk at <a href="http://sungardsummit.com/summit2008/index.html">SunGard Summit</a> in Anaheim this spring on <a href="http://www.plymouth.edu">Plymouth State</a>&#8216;s portal (<a href="http://my.plymouth.edu">myPlymouth</a>).  There were a number of really great questions that came up following my presentation, one of which is the topic of this post:  </p>
<div class="quote">&#8220;How do you force a client&#8217;s browser to always use the correct version of CSS and/or JavaScript in Luminis?&#8221;</div>
<p>When upgrading Plymouth State&#8217;s Luminis installation from III to IV, we had to tackle this same issue and after banging my head against the wall a number of times, I found our answer.  I wanted to:</p>
<div class="quote">
<ol>
<li>Ensure that the JavaScript and CSS that is being served up to our users can be cached by their browser in order to optimize their download speeds.</li>
<li>Control when a user&#8217;s browser has to re-download a new version of the code.</li>
<li>Do the above within the bounds of the very restrictive caching provided by the Luminis product.</li>
</ol>
</div>
<p>All of it was super easy to do, although I must admit I knocked my head against the wall a few times coming up with the solution to the 3rd in that list.</p>
<h2 id="553_step-1-basic-browser_1" >Step 1: Basic Browser Caching</h2>
<p>When I sat down to tackle this problem, I knew that the inline JavaScript within nested_tables.xsl was an unforgiving issue &#8211; if I wanted to make a change to some of the inline JavaScript, those changes would not be forced upon the users <em>until</em> Luminis decided to let go of its cached nested_tables.xsl.</p>
<p>That didn&#8217;t work for me.  So I ripped the inline styles out and combined a few JavaScript files into one&#8230;called <strong>combined.js</strong>.</p>
<p>My header within the <strong>regularLayout</strong> template in <strong>nested_tables.xsl</strong>now looked something like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;head .......&gt;
   &lt;title&gt;.........&lt;/title&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/js/clientsniffer.js&quot;&gt;&lt;/script&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/js/util.js&quot;&gt;&lt;/script&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/psu/js/combined.js&quot;&gt;&lt;/script&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/psu/js/behavior.js&quot;&gt;&lt;/script&gt;
   &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/psu/style.css&quot;/&gt;
&lt;/head&gt;
</pre>
<p>The files <em>clientsniffer.js</em> and <em>util.js</em> are SunGard delivered and I did not touch those two.  As I mentioned before, I yanked out all the inline JavaScript (provided by SunGard) and dropped that into <em>combined.js</em> along with a number of <a href="http://jquery.com">jQuery</a> code.  Our own custom Luminis JavaScript that controls a lot of our Ajax-like functionality in myPlymouth is in <em>behavior.js</em>.  And of course, <em>style.css</em> holds the CSS for our portal.</p>
<p>All of these files could now be cached by users&#8217; browsers.  Yay.  I bounced the development portal and saw my changes in all their glory.  Life was good.</p>
<h2 id="553_step-2-browser-cache_1" >Step 2: Browser Cache, Code Changes, and You</h2>
<p>Invigorated by my recent success of effectively doing nothing, I grabbed a soda and began tackling the next objective.  I had done this numerous times in my PHP applications and it was as simple as placing a version number at the end of the URLs used in the link and script tags.  As such:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;head .......&gt;
   &lt;title&gt;.........&lt;/title&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/js/clientsniffer.js&quot;&gt;&lt;/script&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/js/util.js&quot;&gt;&lt;/script&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/psu/js/combined.js?v=1.0.0&quot;&gt;&lt;/script&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/psu/js/behavior.js?v=1.0.5&quot;&gt;&lt;/script&gt;
   &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/psu/style.css?v=1.0.5&quot;/&gt;
&lt;/head&gt;
</pre>
<p>Once again, I bounced our portal, saw the changes, and danced around the room.  Step 2.  Accomplished.</p>
<h2 id="553_step-3-taming-versio_1" >Step 3: Taming Versioning/Cache Expiration in Luminis</h2>
<p>The goal of taming this versioning/cache expiration was to do so without the need for bouncing the portal so I could make changes on the fly without planning for down times.  Step 2 &#8211; as I detailed above &#8211; only gets you so far.  With Step 2 in place, I could easily make a change in my CSS file and edit nested_tables.xsl to one-up my version number.  But, because nested_tables is cached by Luminis, that wasn&#8217;t good enough.  Here&#8217;s what I came up with:</p>
<p>I removed the script and link tags in the header of the regularLayout template in nested_tables, created a file called <strong>load.js</strong>, and dropped the homeless script/link tags as document.writes in load.js&#8230;as so:</p>
<h3 id="553_start-of-a-solution-_1" >Start of a Solution: load.js</h3>
<pre class="brush: jscript; title: ; notranslate">
document.write('&lt;script type=&quot;text/javascript&quot; src=&quot;/js/clientsniffer.js&quot;&gt;&lt;/script&gt;');
document.write('&lt;script type=&quot;text/javascript&quot; src=&quot;/js/util.js&quot;&gt;&lt;/script&gt;');
document.write('&lt;script type=&quot;text/javascript&quot; src=&quot;/psu/js/combined.js?v=1.0.0&quot;&gt;&lt;/script&gt;');
document.write('&lt;script type=&quot;text/javascript&quot; src=&quot;/psu/js/behavior.js?v=1.0.5&quot;&gt;&lt;/script&gt;');
document.write('&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/psu/style.css?v=1.0.5&quot;/&gt;');
</pre>
<h3 id="553_but-wait_1" >But wait&#8230;</h3>
<p>This gave me a file with all of my script/link tags and their appropriate versions.  However&#8230;I couldn&#8217;t simply replace all those script/link tags with a script tag that pointed at load.js because load.js itself would be cached by users&#8217; browsers.  So this got past the Luminis caching, but not our end users.  So I came up with this:</p>
<h3 id="553_final-solution-pre_l_1" >Final Solution: pre_load.js</h3>
<p>So&#8230;I wanted to cache all my sub-files and prevent load.js from caching so that I could version my scripts easily without bouncing the portal.  The solution?  Yet another file!  I called it pre_load.js and it looks something like this:</p>
<pre class="brush: jscript; title: ; notranslate">
document.write('&lt;script type=&quot;text/javascript&quot; src=&quot;/psu/js/load.js?nocache=' + (new Date()).getTime() + '&quot;&gt;&lt;/script&gt;');
</pre>
<p>A simple document.write of a script tag with an appended variable based on time in order to prevent caching on the browser side.  Yup&#8230;load.js is never cached, but it is a small price to pay.</p>
<p>Now my header in the regularLayout template in nested_tables.xsl looks like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;head .......&gt;
   &lt;title&gt;.........&lt;/title&gt;
   &lt;script type=&quot;text/javascript&quot; src=&quot;/psu/js/pre_load.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
</pre>
<h3 id="553_how-it-works_1" >How it works</h3>
<ol>
<li>Luminis happily caches the pre_load.js script tag in the nested_tables.xsl.</li>
<li>The JavaScript within pre_load.js writes another script tag to the document at render time.  That script&#8217;s URL is a call to load.js along with a variable that changes each page load thus preventing load.js from being cached.</li>
<li>load.js then document.writes the appropriately versioned script/link tags into the document.</li>
<li>The individual script/link tags load the associated JavaScript/CSS files.  If the browser has already cached that script/link URL (remember, we change the version numbers when we make changes to the JS or CSS), then the cached file is loaded&#8230;otherwise the new version is retrieved from the server.</li>
</ol>
<h2 id="553_summary_1" >Summary</h2>
<p>The set-up is fairly basic but the results just what we were hoping!  And all it took was:</p>
<ol>
<li>Placing inline JavaScript into a file (combined.js)</li>
<li>Creating load.js to document.write script/link tags</li>
<li>Creating pre_load.js to document.write a script tag that uses a cache-free URL call to load.js</li>
</ol>
<p>To date, we have not had any reported issues with local or server-side caching of our JS/CSS files using this method!  You just need to make sure you remember to version your URLs in load.js!</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/luminis-forcing-cssjavascript-updates-to-clients/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plymouth State: JavaScript Workshop</title>
		<link>http://borkweb.com/story/plymouth-state-javascript-workshop</link>
		<comments>http://borkweb.com/story/plymouth-state-javascript-workshop#comments</comments>
		<pubDate>Mon, 12 Nov 2007 01:40:11 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[it]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plymouth]]></category>
		<category><![CDATA[plymouth state university]]></category>
		<category><![CDATA[psu]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/plymouth-state-javascript-workshop</guid>
		<description><![CDATA[Tonight I led a workshop on JavaScript for some PSU Employees. We discussed JS basics, node manipulation, DOM traversal, AJAX, JavaScript libraries, and myPlymouth implementations of those topics. Here are the slides: &#124; View &#124; Upload your own A few resources that were mentioned: Firefox Extensions (including Firebug) jQuery Slide Examples MegaMan Sprite Animation]]></description>
			<content:encoded><![CDATA[<p>Tonight I led a workshop on JavaScript for some PSU Employees.  We discussed JS basics, node manipulation, DOM traversal, AJAX, JavaScript libraries, and myPlymouth implementations of those topics.  Here are the slides:</p>
<div class="center">
<div style="width:425px;text-align:left" id="__ss_162633"><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=javascript-ajax-dom-manipulation-1194831365260172-2"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=javascript-ajax-dom-manipulation-1194831365260172-2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><a href="http://www.slideshare.net/?src=embed"><img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/></a> | <a href="http://www.slideshare.net/borkweb/javascript-ajax-dom-manipulation" title="View 'JavaScript: Ajax &amp; DOM Manipulation' on SlideShare">View</a> | <a href="http://www.slideshare.net/upload">Upload your own</a></div>
</div>
</div>
<p>A few resources that were mentioned:</p>
<ul>
<li><a href="http://borkweb.com/story/must-have-extensions-for-firefox">Firefox Extensions</a> (including <a href="http://getfirebug.com">Firebug</a>)</li>
<li><a href="http://borkweb.com/story/the-ajax-experience-jquery-toolkit">jQuery</a></li>
<li><a href="http://borkweb.com/examples/js_workshop/">Slide Examples</a></li>
<li><a href="http://borkweb.com/playground/sprite/sprite.html">MegaMan Sprite Animation</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/plymouth-state-javascript-workshop/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery 1.2 Released!</title>
		<link>http://borkweb.com/story/jquery-12-released</link>
		<comments>http://borkweb.com/story/jquery-12-released#comments</comments>
		<pubDate>Tue, 11 Sep 2007 11:29:15 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery 1.2]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[toolkit]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jquery-12-released</guid>
		<description><![CDATA[This is a major release for the JavaScript library that I have grown to love. Before I list the new features, it is important to note what functionality has been removed from jQuery. Here&#8217;s the deprecated functionality: These Selectors XPath Descendant Selector: $(&#8220;div//p&#8221;) XPath Child Selector: $(&#8220;div/p&#8221;) XPath Parent Selector: $(&#8220;p/../div&#8221;) XPath Contains Predicate Selector: [...]]]></description>
			<content:encoded><![CDATA[<p>This is a <a href="http://jquery.com/blog/2007/09/10/jquery-12-jqueryextendawesome/">major release</a> for the JavaScript library that I have <a href="http://borkweb.com/story/the-ajax-experience-jquery-toolkit">grown to</a> <a href="http://borkweb.com/story/book-review-learning-jquery">love</a>.  Before I list the new features, it is important to note what functionality has been removed from jQuery.  </p>
<h2 id="_heres-the-deprecated_1" >Here&#8217;s the deprecated functionality:</h2>
<ul>
<li>These Selectors
<ul>
<li><strong>XPath Descendant Selector</strong>: $(&#8220;div//p&#8221;)</li>
<li><strong>XPath Child Selector</strong>: $(&#8220;div/p&#8221;)</li>
<li><strong>XPath Parent Selector</strong>: $(&#8220;p/../div&#8221;)</li>
<li><strong>XPath Contains Predicate Selector</strong>: $(&#8220;div[p]&#8220;)</li>
<li><strong>XPath Attribute Selector</strong>: $(&#8220;a[@href]&#8220;)</li>
</ul>
</li>
<li><strong>Calling clone() with an argument</strong>: $(&#8220;div&#8221;).clone(false);</li>
<li>These Traversal Functions <em>use the new .slice() instead)</em>:
<ul>
<li>$(&#8220;div&#8221;).eq(0);</li>
<li>$(&#8220;div&#8221;).lt(2);</li>
<li>$(&#8220;div&#8221;).gt(2);</li>
</ul>
</li>
<li>These Ajax Functions:
<ul>
<li>$(&#8220;#elem&#8221;).loadIfModified(&#8220;some.php&#8221;);</li>
<li>$.getIfModified(&#8220;some.php&#8221;);</li>
<li>$.ajaxTimeout(3000);</li>
<li>$(&#8230;).evalScripts();</li>
</ul>
</li>
</ul>
<p>Thankfully a number of those don&#8217;t effect me.  I&#8217;ll have to comb through my code to get rid of the .gt, .lt, and .eq traversal functions as well as a few of the selectors&#8230;but other than that, I&#8217;m good to go.  To find out more about workarounds for the above removed functionality, check the <a href="http://docs.jquery.com/Release:jQuery_1.2">jQuery 1.2 release notes</a></p>
<p>Now&#8230;on to the good stuff.  </p>
<h2 id="_new-features_1" >New features!</h2>
<ul>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Selectors" title="Release:jQuery 1.2/Selectors">Selectors</a></b></p>
<ul>
<li>&nbsp;:has(selector)
</li>
<li>&nbsp;:header
</li>
<li>&nbsp;:animated
</li>
<li> XPath Selector Plugin
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Attributes" title="Release:jQuery 1.2/Attributes">Attributes</a></b>
<ul>
<li> .val() Overhaul
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Traversing" title="Release:jQuery 1.2/Traversing">Traversing</a></b>
<ul>
<li> .map()
</li>
<li> .prevAll() / .nextAll()
</li>
<li> .slice()
</li>
<li> .hasClass()
</li>
<li> .andSelf()
</li>
<li> .contents()
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Manipulation" title="Release:jQuery 1.2/Manipulation">Manipulation</a></b>
<ul>
<li> .wrapInner() / .wrapAll()
</li>
<li> .replaceWith() / .replaceAll()
</li>
<li> Event Cloning
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/CSS" title="Release:jQuery 1.2/CSS">CSS</a></b>
<ul>
<li> .offset()
</li>
<li> .height() / .width() for document and window
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Ajax" title="Release:jQuery 1.2/Ajax">Ajax</a></b>
<ul>
<li> Partial .load()
</li>
<li> Cross-Domain getScript
</li>
<li> JSONP
</li>
<li> .serialize() Overhaul
</li>
<li> Disable Caching
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Effects" title="Release:jQuery 1.2/Effects">Effects</a></b>
<ul>
<li> .stop()
</li>
<li> %/em Animations
</li>
<li> Color Animations
</li>
<li> Relative Animations
</li>
<li> Queue Control
</li>
<li>&nbsp;:animated
</li>
<li> step: Function
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Events" title="Release:jQuery 1.2/Events">Events</a></b>
<ul>
<li> Namespaced Events
</li>
<li> .triggerHandler()
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Internals" title="Release:jQuery 1.2/Internals">Internals</a></b>
<ul>
<li> Documentation Move
</li>
<li> Expando Management
</li>
</ul>
</li>
</ul>
<p>I have to say&#8230;it is a pretty snazzy release and I&#8217;ll begin implementing the new version shortly. w00t.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jquery-12-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Plugin: Live Query</title>
		<link>http://borkweb.com/story/jquery-plugin-live-query</link>
		<comments>http://borkweb.com/story/jquery-plugin-live-query#comments</comments>
		<pubDate>Wed, 22 Aug 2007 14:24:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Brandon Aaron]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[live query]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jquery-plugin-live-query</guid>
		<description><![CDATA[My hear is exploding with happiness and joy at the existence of Brandon Aaron. He has built a sweet jQuery plugin (Live Query) that reduces complexity in Ajax and general DOM manipulation coding by a great deal (when it comes to applying behaviors). First, let me tell you the problem (if you don&#8217;t already know): [...]]]></description>
			<content:encoded><![CDATA[<p>My hear is exploding with happiness and joy at the existence of <a href="http://brandonaaron.net">Brandon Aaron</a>.  He has built a sweet jQuery plugin (<a href="http://brandonaaron.net/docs/livequery/">Live Query</a>) that reduces complexity in Ajax and general DOM manipulation coding by a great deal (when it comes to applying behaviors).  First, let me tell you the problem (if you don&#8217;t already know):</p>
<p>Say I build a web application where I want to assign an onClick event to an &lt;a&gt; tag.  In jQuery I&#8217;d do it like this:</p>
<p>First the HTML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;another.html&quot; class=&quot;another&quot;&gt;Grab Another!&lt;/a&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Now lets do up the JavaScript:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  $('a.whatever').bind('click',function(){
    alert('ZOMG Hai');
    return false;
  });
});
</pre>
<p>Simple, right?  Yeah.  It is.  Nothing new.  Now&#8230;say that I manipulate the DOM and add in another &lt;a&gt; tag with the class &#8220;whatever&#8221; that I want the same even applied (with or without Ajax, doesn&#8217;t matter).  Here&#8217;s what I would have had to do in the past:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  $('a.another').bind('click',function(){
    $('ul').append('&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;');

    $('a.whatever').bind('click',function(){
      alert('ZOMG Hai');
      return false;
    });

    return false;
  });
});
</pre>
<p>See that?  Kinda complex.  Things become quite complex when you begin doing Cross Domain Scripting via Remote JavaScript calls (which is what is heavily used in one of the apps I have done front-end development for).  </p>
<p>The Live Query plugin is a beautiful thing as it &#8220;auto-magically&#8221; binds events to dynamically added elements within the page as they appear! So ALL of that JavaScript from both examples becomes:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  $('a.whatever').livequery('click',function(){
    alert('ZOMG Hai');
    return false;
  });

  $('a.another').bind('click',function(){
    $('ul').append('&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;');
    return false;
  });
});
</pre>
<p>Yup.  That&#8217;s it.  Bind a livequery event to an element and as elements that match appear on the page&#8230;BAM!  The event is applied.</p>
<p>There are some more advanced things you can do with the plugin and you can find those out at the <a href="http://brandonaaron.net/docs/livequery/">Live Query site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jquery-plugin-live-query/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Book Review: Learning jQuery</title>
		<link>http://borkweb.com/story/book-review-learning-jquery</link>
		<comments>http://borkweb.com/story/book-review-learning-jquery#comments</comments>
		<pubDate>Mon, 06 Aug 2007 22:21:08 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jonathan chaffer]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[karl swedberg]]></category>
		<category><![CDATA[learning jquery]]></category>
		<category><![CDATA[packt publishing]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/book-review-learning-jquery</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/exec/obidos/ASIN/1847192505/masterwishcom-20"><img src="http://ec1.images-amazon.com/images/I/51A2eSmL4QL._AA240_.jpg" class="post_image" float:left;"/></a> I&#8217;m  a <a href="http://borkweb.com/story/the-ajax-experience-jquery-toolkit">huge fan</a> and avid user of <a href="http://jquery.com">jQuery</a> and have been extremely impressed by the <a href="http://docs.google.com">documentation</a> provided on the jQuery website.  The one thing that documentation lacks, however, is really contextual examples that drive home some bare essentials of JavaScripting with the jQuery library.  <strong>Learning jQuery</strong> &#8211; a book by Jonathan Chaffer and Karl Swedberg &#8211; is an excellent introductory book for those that are thinking about using (or struggling with) jQuery.  </p>
<p>jQuery, while a fairly high level JavaScript library is a beautiful thing but can be very daunting to a developer that is new to JavaScripting or is coming from a dissimilar library, being thrust full bore into a &#8216;new&#8217; way of doing old tricks. (Which jQuery is great at by the way&#8230;it makes the new ways super sexy, sleek, and easy).  The authors do a great job of explaining <em>what</em> jQuery is and <em>why</em> it is such a powerful tool.</p>
<p>Throughout the book are examples on traversing and manipulating the <a href="http://borkweb.com/story/node-manipulation-in-the-dom">DOM</a>, event handling, leveraging jQuery&#8217;s JS effect capabilities, <a href="http://borkweb.com/story/ajax-more-than-a-buzz-word">AJAX</a>, etc; many of which are built off of previously detailed examples, allowing the reader to easily grasp what is going on and <em>why</em> a chunk of code was used.  </p>
<p>While I feel this book is primarily an <strong>excellent</strong> introductory source for diving into the world of JavaScript development with jQuery, the fairly seasoned jQuery user (like myself) may find a trick or two that they hadn&#8217;t quite thought of&#8230;  As I read through, I found a few choice bits that allowed me to make <em>my own</em> code more efficient!  </p>
<p>My only real complaint with the book is the index at the back.  There are a number of jQuery functions that are discussed within the chapters yet weren&#8217;t referenced in the index.  A small nitpick, I know, but I&#8217;m a sucker for a good index :)</p>
<p>So.  Overall, I think the book is a good thing to keep on the bookshelf, whether a you are a jQuery n00b or not.  There&#8217;s always a co-worker/friend/programming buddy that will want to learn jQuery and what better way to get them rolling on there own than a link to the jQuery docs and a sweet book?</p>
<p>You can get the book <a href="http://www.amazon.com/exec/obidos/ASIN/1847192505/masterwishcom-20">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/book-review-learning-jquery/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Plugin: Sexy Comments v1.4 Released!</title>
		<link>http://borkweb.com/story/plugin-sexy-comments-v14-released</link>
		<comments>http://borkweb.com/story/plugin-sexy-comments-v14-released#comments</comments>
		<pubDate>Fri, 03 Aug 2007 12:52:24 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[borkweb]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[gravatar]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[matt batchelder]]></category>
		<category><![CDATA[matthew batchelder]]></category>
		<category><![CDATA[mybloglog]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sexy]]></category>
		<category><![CDATA[sexy comments]]></category>
		<category><![CDATA[sexycomments]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/plugin-sexy-comments-v14-released</guid>
		<description><![CDATA[[[innerindex]] Introduction This has been a long time coming and I am happy to announce the release of Sexy Comments v1.4! With this version comes a lot of changes&#8230;so be sure to read the installation section! Along with simple optimizations and general restructure, the following features are now available: Feature List Ajax comment preview (new [...]]]></description>
			<content:encoded><![CDATA[<p>[[innerindex]]<br />
<h2 id="_introduction_1" >Introduction</h2>
<p>This has been a long time coming and I am happy to announce the release of Sexy Comments v1.4!  With this version comes <strong>a lot of changes&#8230;so be sure to read the installation section</strong>!  Along with simple optimizations and general restructure, the following features are now available:</p>
<h2 id="_feature-list_1" >Feature List</h2>
<ul>
<li>Ajax comment preview (<strong>new feature</strong>)</li>
<li>Author post highlighting</li>
<li>Avatars
<ul>
<li>Either display/hide avatars</li>
<li>Select your avatar service of choice (Gravatar and MyBlogLog options are available)</li>
<li>Specify maximum avatar dimension (Gravatar Only)</li>
<li>Customize default/trackback avatars</li>
</ul>
</li>
<li>Comment Reply-To  (<strong>new feature</strong>)</li>
<li>Comment Themes  (<strong>new feature</strong>)</li>
<li>CSS overriding</li>
<li>&#8220;Number of Comments&#8221; message customization</li>
<li>jQuery inclusion toggling</li>
</ul>
<p></p>
<h2 id="_installation-upgradi_1" >Installation &#038; Upgrading</h2>
<ol>
<li>Download Sexy Comments v1.4 from the WordPress <a href="http://wordpress.org/extend/plugins/sexy-comments/">plugin directory</a></li>
<li>Unzip that little sucker</li>
<li>Place <strong>sexy-comments</strong> folder in your wp-content/plugins directory (it should look like this: <strong>wp-content/plugins/sexy-comments/</strong></li>
<li>Log in to your WordPress plugin admin page and activate the plugin.</li>
<li>In the plugin admin page, click the <strong>SexyComments</strong> sub-menu.</li>
<li>Customize the settings until you have something that works for you.</li>
<li>Locate your theme&#8217;s template file that displays comments (typically <strong>comments.php</strong>).  Remove the comment output loop and replace with:
<pre class="brush: php; title: ; notranslate">
&lt; ?php sexycomments::show($comments); ?&gt;
</pre>
</li>
<li>If you plan to use the Ajax features or the Reply-To features, you will need to do two things.
<ol>
<li>Enable jQuery and jQuery Form Extension via the Plugin > SexyComments administration page.</li>
<li>Locate the template file that contains the comment submission form (typically <strong>comments.php</strong> <em>near the bottom</em>) and replace that chunk of code with:
<pre class="brush: php; title: ; notranslate">
&lt; ?php sexycomments::form(); ?&gt;
</pre>
</li>
</ol>
<p><em>NOTE: Be sure not to touch the section that generates the form for adding comments! This plugin does not re-create the comment creation form.</em>
</li>
<li>Lastly, consider disabling the plugin CSS and taking the example CSS provided and customize it to suit your theme&#8217;s color scheme.</li>
<li>You should be all set, now! w00t w00t! Go make a MyBlogLog or Gravatar account if you don&#8217;t already have one and upload an avatar. Gravatar tends to be pretty flakey so I&#8217;d suggest using MyBlogLog.</li>
</ol>
<p></p>
<h2 id="_faqs_1" >FAQs</h2>
<ul>
<li><strong>Q:</strong> <em>What is this &#8220;comment loop&#8221; you speak of?</em>
<p><strong>A:</strong> Ah, yes.  That thing.  Well, its anatomy looks similar to this (there will be some variation from theme to theme):</p>
<pre class="brush: php; title: ; notranslate">
&lt; ?php if ($comments) : ?&gt;
	&lt;!-- some HTML is typically here --&gt;

	&lt; ?php foreach ($comments as $comment) : ?&gt;
        &lt;!-- the output HTML of each individual comment --&gt;

	&lt; ?php endforeach; /* end for each comment */ ?&gt;
	&lt;!--...more HTML --&gt;
 &lt; ?php else : // this is displayed if there are no comments so far ?&gt;
	&lt; ?php if ('open' == $post-&gt;comment_status) : ?&gt;
		&lt;!-- typically a blank area or a place with a comment --&gt;
	 &lt; ?php else : // comments are closed ?&gt;
		&lt;!-- closed comments section --&gt;
	&lt; ?php endif; ?&gt;
&lt; ?php endif; ?&gt;
</pre>
</li>
<li><strong>Q:</strong> <em>Ok&#8230;so I just upgraded to a new version and there is nothing in the SexyComments admin page&#8230;WTF?</em>
<p><strong>A:</strong> Yeah. Sorry about that.  In this version, the directory structure has changed drastically and Sexy Comments should no longer live in wp-content/plugins/sexycomments.php OR wp-content/plugins/sexycomments/sexycomments.php, but instead it should be in <strong>wp-content/plugins/sexy-comments/</strong>.  Make sure that the plugin is in the correct location of your plugins directory.
</li>
<li><strong>Q:</strong> <em>What happened to sexycomments_print($comments)?  I used to use that to get my comments to display&#8230;will it still work?</em>
<p><strong>A:</strong> Along with a directory structure overhaul, this version had a large code overhaul as well.  The old function (<em>sexycomments_print</em>) is <strong>deprecated</strong> but will still work for the time being.  I greatly urge you to move over to the new function call <strong>sexycomments::show($comments)</strong> as that is the new *impoved* function.
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/plugin-sexy-comments-v14-released/feed</wfw:commentRss>
		<slash:comments>298</slash:comments>
		</item>
		<item>
		<title>jQuery 1.1.3: Speed Improvements and Bug Fixes</title>
		<link>http://borkweb.com/story/jquery-113-speed-improvements-and-bug-fixes</link>
		<comments>http://borkweb.com/story/jquery-113-speed-improvements-and-bug-fixes#comments</comments>
		<pubDate>Mon, 02 Jul 2007 11:44:35 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jquery-113-speed-improvements-and-bug-fixes</guid>
		<description><![CDATA[After a long wait, jQuery 1.1.3 has been released! (Download it at the jQuery site) When I first adopted jQuery a year ago, the library boasted both faster speeds and smaller size than any other JavaScript Ajax/DOM tool. With the release of jQuery&#8217;s version 1.1.2, a number of jQuery&#8217;s operations became very slow and inefficiencient, [...]]]></description>
			<content:encoded><![CDATA[<p>After a long wait, jQuery 1.1.3 has been released! (Download it at the <a href="http://jquery.com">jQuery site</a>)  When I first adopted jQuery a year ago, the library boasted both faster speeds and smaller size than any other JavaScript Ajax/DOM tool.  With the release of jQuery&#8217;s version 1.1.2, a number of jQuery&#8217;s operations became very slow and inefficiencient, as evidenced by MooTool&#8217;s <a href="http://mootools.net/slickspeed/">SlickSpeed CSS Selector Test</a> (found via <a href="http://ajaxian.com/archives/slickspeed-css-selector-testsuite">Ajaxian</a>) which crept up a few weeks ago.</p>
<p>This new release boasts an 800% speed improvement with a number of its selectors along with various enhancements across the board!  The selector speed boost makes me one happy camper.  Check out the enhancements as it compares to 1.1.2:</p>
<table>
<thead>
<tr>
<th>Browser</th>
<th>jQuery 1.1.2</th>
<th>jQuery 1.1.3</th>
<th>% Improvement</th>
</tr>
</thead>
<tbody>
<tr>
<th>IE 6</th>
<td>4890ms</td>
<td>661ms</td>
<th>740%</th>
</tr>
<tr>
<th>Firefox 2</th>
<td>5629ms</td>
<td>567ms</td>
<th>993%</th>
</tr>
<tr>
<th>Safari 2</th>
<td>3575ms</td>
<td>475ms</td>
<th>753%</th>
</tr>
<tr>
<th>Opera 9.1</th>
<td>3196ms</td>
<td>326ms</td>
<th>980%</th>
</tr>
<tr>
<td colspan="3" style="text-align: right;">Average improvement:</td>
<th>867%</th>
</tr>
</tbody>
</table>
<p>And here&#8217;s how it now stacks up against the SlickSpeed test:</p>
<table>
<thead>
<tr>
<th>Browser</th>
<th>Prototype</th>
<th>jQuery</th>
<th>Mootools</th>
<th>Ext</th>
<th>Dojo</th>
</tr>
</thead>
<tbody>
<tr>
<th>IE 6</th>
<td>1476ms</td>
<th>661ms</th>
<td>1238ms</td>
<td>672ms</td>
<td>738ms</td>
</tr>
<tr>
<th>Firefox 2</th>
<td>219ms</td>
<td>567ms</td>
<td>220ms</td>
<td>951ms</td>
<td>440ms</td>
</tr>
<tr>
<th>Safari 2</th>
<td>1568ms</td>
<td>475ms</td>
<td>909ms</td>
<td>417ms</td>
<td>527ms</td>
</tr>
<tr>
<th>Opera 9.1</th>
<td>220ms</td>
<td>326ms</td>
<td>217ms</td>
<td>296ms</td>
<td>220ms</td>
</tr>
</tbody>
</table>
<p>In addition to the speed enhancements, there were several other notable things:</p>
<ul>
<li><strong>Unicode Selectors</strong>: Yup&#8230;now you can use fancy non-english characters.</li>
<li><strong>Escape Selectors</strong>:  This is awesome.  Now, if you use weird characters (i.e. punctuation) in a class/id name, you can now escape those characters within the selector syntax.  E.g. <em>$(&#8220;div#foo\.bar&#8221;)</em></li>
<li><strong>Inequality Selector</strong>: You can now select elements where their attributes do not match a specific string of characters.  E.g. <em>$(&#8220;div[@id!=test]&#8220;)</em></li>
<li><strong>:nth-child() improvements</strong>: jQuery has supported selectors like :nth-child(1) and :nth-child(odd) since the beginning of jQuery, now they’ve added advanced :nth-child selectors, such as:
<ul>
<li>$(&#8220;div:nth-child(2n)&#8221;)</li>
<li>$(&#8220;div:nth-child(2n+1)&#8221;)</li>
<li>$(&#8220;div:nth-child(n)&#8221;)</li>
</ul>
</li>
<li><strong>Space-separated attributes</strong>: After being removed in jQuery 1.0, this selector has now been brought back by popular demand. It allows you to locate individual items in a space-separated attribute (such as a class or rel attribute).  E.g. <em>$(&#8220;a[@rel~=test]&#8220;)</em></li>
<li><strong>Animation Improvements</strong>: Animations are now significantly faster and smoother. Additionally, you can run more simultaneous animations without incurring any speed hits.</li>
<li><strong>DOM Event Listeners</strong>: Internally, the jQuery Event system has been overhauled to use the DOM Event system, rather than the classical “onclick” style of binding event handlers. This improvement allows you to be more unobtrusive in your use of the library (not affecting the flow of other libraries around it). Additionally, it helped to resolve some of the outstanding issues that existed with binding event listeners to IFrames.</li>
<li><strong>Event Normalization</strong>: Some great steps have been taken to normalize keyboard and mouse events. You can now access the event.which property to get most details about the specific key or button that was pressed.</li>
<li><strong>Multiple .is()</strong>: The .is() method can now take multiple selectors, separated by a comma. This allows you to test your jQuery set against multiple selectors. E.g. <em>$(&#8220;div&#8221;).is(&#8220;:visible, :first&#8221;)</em></li>
<li><strong>Browser Version</strong>: A commonly requested feature, by plugin authors, was a way to determine what browser version their users were using. We now expose an extra property through which this information can be accessed. E.g. <em>jQuery.browser.version</em></li>
</ul>
<p>Additionally, the jQuery team has addressed 80+ bugs and has roadmapped out the next two releases (v1.1.4 and v1.2).  To check out the full jQuery 1.2 roadmap, <a href="http://docs.jquery.com/JQuery_1.2_Roadmap">go here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jquery-113-speed-improvements-and-bug-fixes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 1.1a Released</title>
		<link>http://borkweb.com/story/jquery-11a-released</link>
		<comments>http://borkweb.com/story/jquery-11a-released#comments</comments>
		<pubDate>Mon, 08 Jan 2007 13:50:10 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jquery-11a-released</guid>
		<description><![CDATA[The jQuery 1.1a has been released today by the jQuery team! Its important to note that this is an alpha version before you go out and install it in a production environment, but the jQuery team asks that people give it a round of testing prior to the release this weekend. The &#8220;Quick and Dirty&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://jquery.com/blog/2007/01/08/jquery-11a/">jQuery 1.1a has been released</a> today by the jQuery team!  Its important to note that this is an alpha version before you go out and install it in a production environment, but the jQuery team asks that people give it a round of testing prior to the release this weekend.</p>
<p>The &#8220;Quick and Dirty&#8221; on v1.1:</p>
<ul>
<li>Its selectors are 10-20x faster than those in jQuery 1.0.4.</li>
<li>The documentation has been completely revamped.</li>
<li>The complexity of the API has dropped by 47%.</li>
<li>It has a ton of bug fixes.</li>
<li>It has a bunch of great new features.</li>
<li>… and it’s still the small 19KB that you’ve come to expect.</li>
</ul>
<p>With this release come a <em>lot</em> of API changes:</p>
<p>Firstly, <strong>:nth-child()</strong> now starts at 1, instead of 0.</p>
<p>A number of methods have been re-organized/re-named.  Here&#8217;s the translation of old to new functions:</p>
<table style="width:100%">
<tr>
<th>Old Way (1.0.x)</th>
<th>New Way (1.1)</th>
</tr>
<tr>
<td>.ancestors()</td>
<td>.parents()</td>
</tr>
<tr>
<td>.width()</td>
<td>.css(&#8221;width&#8221;)</td>
</tr>
<tr>
<td>.height()</td>
<td>.css(&#8221;height&#8221;)</td>
</tr>
<tr>
<td>.top()</td>
<td>.css(&#8221;top&#8221;)</td>
</tr>
<tr>
<td>.left()</td>
<td>.css(&#8221;left&#8221;)</td>
</tr>
<tr>
<td>.position()</td>
<td>.css(&#8221;position&#8221;)</td>
</tr>
<tr>
<td>.float()</td>
<td>.css(&#8221;float&#8221;)</td>
</tr>
<tr>
<td>.overflow()</td>
<td>.css(&#8221;overflow&#8221;)</td>
</tr>
<tr>
<td>.color()</td>
<td>.css(&#8221;color&#8221;)</td>
</tr>
<tr>
<td>.background()</td>
<td>.css(&#8221;background&#8221;)</td>
</tr>
<tr>
<td>.id()</td>
<td>.attr(&#8221;id&#8221;)</td>
</tr>
<tr>
<td>.title()</td>
<td>.attr(&#8221;title&#8221;)</td>
</tr>
<tr>
<td>.name()</td>
<td>.attr(&#8221;name&#8221;)</td>
</tr>
<tr>
<td>.href()</td>
<td>.attr(&#8221;href&#8221;)</td>
</tr>
<tr>
<td>.src()</td>
<td>.attr(&#8221;src&#8221;)</td>
</tr>
<tr>
<td>.rel()</td>
<td>.attr(&#8221;rel&#8221;)</td>
</tr>
<tr>
<td>.oneblur(fn)</td>
<td>.one(&#8221;blur&#8221;,fn)</td>
</tr>
<tr>
<td>.onefocus(fn)</td>
<td>.one(&#8221;focus&#8221;,fn)</td>
</tr>
<tr>
<td>.oneload(fn)</td>
<td>.one(&#8221;load&#8221;,fn)</td>
</tr>
<tr>
<td>.oneresize(fn)</td>
<td>.one(&#8221;resize&#8221;,fn)</td>
</tr>
<tr>
<td>.onescroll(fn)</td>
<td>.one(&#8221;scroll&#8221;,fn)</td>
</tr>
<tr>
<td>.oneunload(fn)</td>
<td>.one(&#8221;unload&#8221;,fn)</td>
</tr>
<tr>
<td>.oneclick(fn)</td>
<td>.one(&#8221;click&#8221;,fn)</td>
</tr>
<tr>
<td>.onedblclick(fn)</td>
<td>.one(&#8221;dblclick&#8221;,fn)</td>
</tr>
<tr>
<td>.onemousedown(fn)</td>
<td>.one(&#8221;mousedown&#8221;,fn)</td>
</tr>
<tr>
<td>.onemouseup(fn)</td>
<td>.one(&#8221;mouseup&#8221;,fn)</td>
</tr>
<tr>
<td>.onemousemove(fn)</td>
<td>.one(&#8221;mousemove&#8221;,fn)</td>
</tr>
<tr>
<td>.onemouseover(fn)</td>
<td>.one(&#8221;mouseover&#8221;,fn)</td>
</tr>
<tr>
<td>.onemouseout(fn)</td>
<td>.one(&#8221;mouseout&#8221;,fn)</td>
</tr>
<tr>
<td>.onechange(fn)</td>
<td>.one(&#8221;change&#8221;,fn)</td>
</tr>
<tr>
<td>.onereset(fn)</td>
<td>.one(&#8221;reset&#8221;,fn)</td>
</tr>
<tr>
<td>.oneselect(fn)</td>
<td>.one(&#8221;select&#8221;,fn)</td>
</tr>
<tr>
<td>.onesubmit(fn)</td>
<td>.one(&#8221;submit&#8221;,fn)</td>
</tr>
<tr>
<td>.onekeydown(fn)</td>
<td>.one(&#8221;keydown&#8221;,fn)</td>
</tr>
<tr>
<td>.onekeypress(fn)</td>
<td>.one(&#8221;keypress&#8221;,fn)</td>
</tr>
<tr>
<td>.onekeyup(fn)</td>
<td>.one(&#8221;keyup&#8221;,fn)</td>
</tr>
<tr>
<td>.oneerror(fn)</td>
<td>.one(&#8221;error&#8221;,fn)</td>
</tr>
<tr>
<td>.unblur(fn)</td>
<td>.unbind(&#8221;blur&#8221;,fn)</td>
</tr>
<tr>
<td>.unfocus(fn)</td>
<td>.unbind(&#8221;focus&#8221;,fn)</td>
</tr>
<tr>
<td>.unload(fn)</td>
<td>.unbind(&#8221;load&#8221;,fn)</td>
</tr>
<tr>
<td>.unresize(fn)</td>
<td>.unbind(&#8221;resize&#8221;,fn)</td>
</tr>
<tr>
<td>.unscroll(fn)</td>
<td>.unbind(&#8221;scroll&#8221;,fn)</td>
</tr>
<tr>
<td>.ununload(fn)</td>
<td>.unbind(&#8221;unload&#8221;,fn)</td>
</tr>
<tr>
<td>.unclick(fn)</td>
<td>.unbind(&#8221;click&#8221;,fn)</td>
</tr>
<tr>
<td>.undblclick(fn)</td>
<td>.unbind(&#8221;dblclick&#8221;,fn)</td>
</tr>
<tr>
<td>.unmousedown(fn)</td>
<td>.unbind(&#8221;mousedown&#8221;,fn)</td>
</tr>
<tr>
<td>.unmouseup(fn)</td>
<td>.unbind(&#8221;mouseup&#8221;,fn)</td>
</tr>
<tr>
<td>.unmousemove(fn)</td>
<td>.unbind(&#8221;mousemove&#8221;,fn)</td>
</tr>
<tr>
<td>.unmouseover(fn)</td>
<td>.unbind(&#8221;mouseover&#8221;,fn)</td>
</tr>
<tr>
<td>.unmouseout(fn)</td>
<td>.unbind(&#8221;mouseout&#8221;,fn)</td>
</tr>
<tr>
<td>.unchange(fn)</td>
<td>.unbind(&#8221;change&#8221;,fn)</td>
</tr>
<tr>
<td>.unreset(fn)</td>
<td>.unbind(&#8221;reset&#8221;,fn)</td>
</tr>
<tr>
<td>.unselect(fn)</td>
<td>.unbind(&#8221;select&#8221;,fn)</td>
</tr>
<tr>
<td>.unsubmit(fn)</td>
<td>.unbind(&#8221;submit&#8221;,fn)</td>
</tr>
<tr>
<td>.unkeydown(fn)</td>
<td>.unbind(&#8221;keydown&#8221;,fn)</td>
</tr>
<tr>
<td>.unkeypress(fn)</td>
<td>.unbind(&#8221;keypress&#8221;,fn)</td>
</tr>
<tr>
<td>.unkeyup(fn)</td>
<td>.unbind(&#8221;keyup&#8221;,fn)</td>
</tr>
<tr>
<td>.unerror(fn)</td>
<td>.unbind(&#8221;error&#8221;,fn)</td>
</tr>
</table>
<p>What&#8217;s more?  Well, the jQuery team will be posting throughout the week on all the cool new things you can do with jQuery 1.1.  I&#8217;m looking forward to seeing the changes!  Oh, with regards to changes, its important to note with that list of functions above&#8230;the old method will no longer work come v1.1.  To keep those functions in use, a &#8216;helper&#8217; library will need to be used&#8230;chances are that won&#8217;t be available until the 1.1 final.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jquery-11a-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

