<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/>
  <title>planet.jquery.com</title>
  <updated>2012-09-18T03:14:11Z</updated>
  <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
  <author>
    <name>Richard D. Worth</name>
    <email>rdworth@gmail.com</email>
  </author>
  <id>http://planet.jquery.com/atom.xml</id>
  <link href="http://planet.jquery.com/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://planet.jquery.com" rel="alternate"/>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-372641518526969384</id>
    <link href="http://flesler.blogspot.com/feeds/372641518526969384/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=372641518526969384" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/372641518526969384?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/372641518526969384?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/K-1yWNw7NjU/jqueryserialscroll.html" rel="alternate" type="text/html"/>
    <title>jQuery.SerialScroll</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h4>Introduction</h4>This plugin allows you to easily animate any series of elements, by sequentially scrolling them. It uses <a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html" target="_blank">jQuery.ScrollTo</a> to achieve the scrolling animation. It is a very unrestricted plugin, that lets you customize pretty much everything from outside. You can use horizontal or vertical scroll, also combined.  <br/>
<br/>
<h4>What's it for ?</h4>jQuery.SerialScroll doesn't have one definite purpose. It's generic and adaptable. You can certainly use it as a <strong>screen slider</strong>. That is, to sequentially navigate a group of screens.<br/>
This plugin can also animate a <strong>text scroller</strong> in no time.<br/>
It can definitely handle <strong>slideshows</strong>, the high customizability of the scrolling effect lets you create beautiful animations.<br/>
You can even build an automatic <strong>news ticker</strong>!<br/>
Three of these uses are exemplified in the demo.<br/>
Remember, it's not restricted to these situations. It will take care of any collection of html elements that you want to scroll consecutively.  <br/>
<br/>
<h4>Settings and customization</h4>jQuery.SerialScroll gives you access to a lot of options.<br/>
These are:<ul><li><h5 class="setting">target</h5>The element to scroll, it's relative to the matched element.<br/>
If you don't specify this option, the scrolled element is the one you called serialScroll on.</li>
<li><h5 class="setting">event</h5>on which event to react (click by default).</li>
<li><h5 class="setting">start</h5>first element of the series (zero-based index,  0 by default).</li>
<li><h5 class="setting">step</h5>how many elements to scroll each time. Use a negative number to go on the other way.</li>
<li><h5 class="setting">lock</h5>if true(default), the plugin will ignore events if already animating. Then animations can't be queued.</li>
<li><h5 class="setting">cycle</h5>if true, the first element will be shown after going over the last, and the other way around.</li>
<li><h5 class="setting">stop</h5>if true, the plugin will stop any previous animations of the element, to avoid queuing.</li>
<li><h5 class="setting">force</h5>if true, an initial scroll will be forced on start.</li>
<li><h5 class="setting">jump</h5>if true, the specified event can be triggered on the items, and the container will scroll to them.</li>
<li><h5 class="setting">items</h5>selector to the items(relative to the scrolled element).</li>
<li><h5 class="setting">prev</h5>(optional)selector to the 'previous' button.</li>
<li><h5 class="setting">next</h5>(optional)selector to the 'next' button.</li>
<li><h5 class="setting">lazy</h5>if true, the items are collected each time, allowing dynamic content(AJAX, AHAH, jQuery manipulation, etc).</li>
<li><h5 class="setting">interval</h5>If you specify a number, the plugin will add auto scrolling with that interval.</li>
<li><h5 class="setting">constant</h5>Should the speed remain constant, no matter how many items we scroll at once ? (true by default).</li>
<li><h5 class="setting">navigation</h5>Optionally, a selector to a group of elements, that allow scrolling to specific elements by index. Can be less than the amount of items.</li>
<li><h5 class="setting">exclude<span class="new">new</span></h5>If you want the plugin, to stop scrolling before the actual last element, set this to a number, and that amount of items is ignored counting from the end.<br/>
This is useful if you show many items simultaneously, in that case, you probably want to set this option to the amount of visible items - 1.</li>
<li><h5 class="setting">onBefore</h5>A function to be called before each scrolling. It receives the following arguments: event object, targeted element, element to be scrolled, collection of items and position of the targeted element in the collection.<br/>
The scope(this) will point to the element that got the event. If the function returns false, the event is ignored.</li>
</ul>Also, <strong>you can use jQuery.ScrollTo's settings!</strong><br/>
Check its <a href="http://flesler.webs.com/jQuery.ScrollTo/" target="_blank">demo</a> to see all of them.  <br/>
<br/>
<h5>The option 'target'</h5>This option is a new addition, included since 1.2.0.<br/>
Before, you needed to call the plugin once for each scrolled element.<br/>
When this option is specified, the matched elements are no longer the scrolled elements, but a container.<br/>
In this case, the selectors of prev, next, navigation and target will be relative to this container, allowing you to call SerialScroll on many elements at once.  <br/>
<br/>
<h4 id="event_triggering">External manipulation, event triggering</h4>jQuery.SerialScroll automatically binds 3 events to the containers.<br/>
These are:<ul><li><h5 class="setting">prev.serialScroll</h5>Scrolls to the previous element.</li>
<li><h5 class="setting">next.serialScroll</h5>Scrolls to the next element.</li>
<li><h5 class="setting">goto.serialScroll</h5>Scrolls to the specified index, starts with 0.</li>
<li><h5 class="setting">start.serialScroll</h5>(Re)starts autoscrolling.</li>
<li><h5 class="setting">stop.serialScroll</h5>Stops the autoscrolling.</li>
<li><h5 class="setting">notify.serialScroll</h5>Updates the active item.</li>
</ul>This looks confusing, but it's not. You use it like this:  <pre class="js"><span class="keyword">$</span>(container).trigger( <span class="string">'prev'</span> );</pre><pre class="js"><span class="keyword">$</span>(container).trigger( <span class="string">'next'</span> );</pre><pre class="js"><span class="keyword">$</span>(container).trigger( <span class="string">'goto'</span>, <span class="keyword">[</span> <span class="number">3</span> <span class="keyword">]</span> );</pre><pre class="js"><span class="keyword">$</span>(container).trigger( <span class="string">'start'</span> );</pre><pre class="js"><span class="keyword">$</span>(container).trigger( <span class="string">'stop'</span> );</pre><pre class="js"><span class="keyword">$</span>(container).trigger( <span class="string">'notify'</span>, <span class="keyword">[</span> <span class="number">4</span> <span class="keyword">]</span> );</pre>'notify' also accepts a DOM element(item), or any of its descendants.<br/>
$(container) is the element that gets scrolled each time. If you specified a 'target', then <u>that</u> element, else, the element you called the plugin on.<br/>
Note that to use 'start' and 'stop' you need to use the option 'interval' first.<br/>
If your container element already has any of these event names bound(odd!), then just add the namespace when you trigger.<br/>
You probably won't need to deal with these events, but if so, this is how.  <br/>
<br/>
<h4>What makes jQuery.SerialScroll so special ?</h4>This plugin has many positive features, of course, it won't fit everyone's needs. That's impossible.<ul><li><h5>Small Footprint</h5>This plugin is tiny, as said before, it requires jQuery.ScrollTo. Both plugins together, take <strong>less than 3.5kb minified</strong>.<br/>
If by chance, you decide to include <a href="http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html" target="_blank">jQuery.LocalScroll</a>, the 3 of them require <strong>less than 5kb</strong>. Including this plugin is not a bad idea, it can be used, instead of the option 'navigation' to build a widget with sequential and random scrolling.</li>
<li><h5>Highly customizable</h5>This plugin has many settings to customize, in addition, it can use jQuery.ScrollTo's settings. That makes 27 different options!<br/>
If you take a while to analyze them all, you can make your work really unique. </li>
<li><h5>Accessible, degrades gracefully</h5>Probably many will automatically skip this part, shame on you!<br/>
If you make sure non-javascript users will see the scrollbars, then they can perfectly navigate your content. You can show the scrollbars only for these few users, easily, using css/js.<br/>
This is one of the main differences with many similar scripts, they generate the content and the styling using javascript. </li>
<li><h5>Adaptable</h5>jQuery.SerialScroll <u>won't alter the html or styles at all</u>.<br/>
You are in control of the styles and content of your collections. You don't need the plugin to decide what html to use, or how many items to show simultaneously, and you can safely change that yourself, the plugin will always work.<br/>
<u>The items don't need to have fixed size, nor to be aligned</u>. SerialScroll will scroll from one to the other, no matter what.<br/>
If you want a plugin with premade styles or automatic generation of html, then you should consider any of jQuery carousels. </li>
<li><h5>Generic and reusable</h5>Finally, as mentioned before, this plugin can be used for many different situations and doesn't have one specific application. </li>
</ul><h4>Links</h4><ul><li><a href="http://flesler.blogspot.com/2008/02/jqueryserialscroll.html">Main Post</a></li>
<li><a href="https://github.com/flesler/jquery.serialScroll" target="_blank">Github Repo</a></li>
<li><a href="http://demos.flesler.com/jquery/serialScroll/" target="_blank">Demo</a></li>
<li><a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html">jQuery.ScrollTo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/" target="_blank">jQuery.ScrollTo's demo</a></li>
<li><a href="http://demos.flesler.com/jquery/serialScroll/changes.txt" target="_blank">Changelog</a></li>
</ul><h4>Downloads</h4><ul><li><a href="http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.2.js">jQuery.SerialScroll 1.2.2 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.2-min.js">jQuery.SerialScroll 1.2.2 Minified</a><span class="dw-tip">(recommended)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1.js">jQuery.ScrollTo 1.4.3.1 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1-min.js">jQuery.ScrollTo 1.4.3.1 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><em>I really advice using the minified versions. The code is optimized to those releases. Source versions should only serve to learn.</em>  <br/>
<br/>
<h5 class="setting">3/07/08</h5><span class="small">Added 1.1.2, start and stop events. Allows negative step.</span> <br/>
<h5 class="setting">3/10/08</h5><span class="small">Added 1.2.0, major release, updated everything.</span> <br/>
<h5 class="setting">3/20/08</h5><span class="small">Added 1.2.1, added 'exclude' and enhancements.</span> <br/>
<h5 class="setting">4/28/08</h5><span class="small">Added a link to "Doctorate on jQuery.SerialScroll".</span> <br/>
<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-372641518526969384?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/K-1yWNw7NjU" width="1"/></div>
    </content>
    <updated>2012-09-13T15:33:52Z</updated>
    <published>2008-02-11T21:08:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery.SerialScroll"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2008/02/jqueryserialscroll.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-2398733521291939275</id>
    <link href="http://flesler.blogspot.com/feeds/2398733521291939275/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=2398733521291939275" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/2398733521291939275?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/2398733521291939275?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/I61rkLGtOhw/jqueryserialscroll-110-released.html" rel="alternate" type="text/html"/>
    <title>jQuery.SerialScroll 1.1 released</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I added a major release of jQuery.SerialScroll. It doesn't have that many changes, but I really feel it made one step ahead.  <h4>Optimizations</h4><ul><li>The animation is skipped if a bad position was received or it's the same as the actual. Saving some overhead.</li>
</ul><h4>Changes</h4><ul><li>Changed the licensing from GPL to GPL+MIT.</li>
</ul><h4>Features</h4><ul><li>The plugin binds 3 events to the container to allow external manipulation. They are clearly explained in the main post, please check it.</li>
<li>Added 2 more arguments to the onBefore callback: actual item collection, index of the actual item in the collection.</li>
<li>Added option 'interval', can be a number specifying the amount of milliseconds for autoscrolling.</li>
</ul>I upgraded the main post and it has extensive and detailed documentation. Also added some more text and options to the demo.  <h4>Links</h4><ul><li><a href="http://flesler.blogspot.com/2008/02/jqueryserialscroll.html">Main Post</a></li>
<li><a href="https://github.com/flesler/jquery.serialScroll" target="_blank">Github Repo</a></li>
<li><a href="http://demos.flesler.com/jquery/serialScroll/" target="_blank">Demo</a></li>
<li><a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html">jQuery.ScrollTo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/" target="_blank">jQuery.ScrollTo's demo</a></li>
<li><a href="http://demos.flesler.com/jquery/serialScroll/changes.txt" target="_blank">Changelog</a></li>
</ul><h4>Downloads</h4><ul><li><a href="http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.2.js">jQuery.SerialScroll 1.2.2 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.2-min.js">jQuery.SerialScroll 1.2.2 Minified</a><span class="dw-tip">(recommended)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1.js">jQuery.ScrollTo 1.4.3.1 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1-min.js">jQuery.ScrollTo 1.4.3.1 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><em>I really advice using the minified versions. The code is optimized for those releases. Source versions should only serve to learn.</em><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-2398733521291939275?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/I61rkLGtOhw" width="1"/></div>
    </content>
    <updated>2012-09-13T15:33:38Z</updated>
    <published>2008-03-01T04:37:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery.SerialScroll"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2008/03/jqueryserialscroll-110-released.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-7073164068523618839</id>
    <link href="http://flesler.blogspot.com/feeds/7073164068523618839/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=7073164068523618839" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/7073164068523618839?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/7073164068523618839?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/464i7h-HdO8/jqueryserialscroll-120-released.html" rel="alternate" type="text/html"/>
    <title>jQuery.SerialScroll 1.2 released</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I added a major release of jQuery.SerialScroll. It includes a ton of new features and allows close integration with <a href="http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html" target="_blank">jQuery.LocalScroll</a>.  <br/>
<br/>
<h4>Fixes</h4><ul><li>If you call the plugin on the same (scrollable)element more than once, the custom events get bound only on the first call.</li>
</ul><h4>Changes</h4><ul><li>The event 'start' no longer receives the interval, you must set it at start, stop/start only pause/restart.</li>
</ul><h4>Features</h4><ul><li>You can notify SerialScroll that the active item changed, by using the event notify.serialScroll.</li>
<li>Thanks to the event notify, this plugin can be now closely integrated with LocalScroll(1.2.5 or higher).</li>
<li>Also, thanks to notify, you can call SerialScroll on the same element more than once, and they interact nicely.</li>
<li>You can specify the option 'target', and then the matched elements become the context of all the selectors, and target matches the element to be scrolled. This allows you to call SerialScroll on many element at the same time.</li>
<li>You can combine the options 'jump' and 'lazy' (not adviced if no target is specified).</li>
<li>LocalScroll and SerialScroll are so compatible, that they can use the same hash of settings.</li>
<li>Added option 'constant'(true by default), specifies whether the speed must be constant or not.</li>
<li>Added option 'navigation' to add a group of element to jump to the items.</li>
</ul><h4>Links</h4><ul><li><a href="http://flesler.blogspot.com/2008/02/jqueryserialscroll.html">Main Post</a></li>
<li><a href="http://plugins.jquery.com/project/SerialScroll" target="_blank">Project Page</a></li>
<li><a href="http://flesler.webs.com/jQuery.SerialScroll/" target="_blank">Demo</a></li>
<li><a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html">jQuery.ScrollTo</a></li>
<li><a href="http://flesler.webs.com/jQuery.ScrollTo/" target="_blank">jQuery.ScrollTo's demo</a></li>
<li><a href="http://flesler.webs.com/jQuery.SerialScroll/changes.txt" target="_blank">Changelog</a></li>
</ul><h4>Downloads</h4><ul><li><a href="http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.1.js">jQuery.SerialScroll 1.2.1 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.1-min.js">jQuery.SerialScroll 1.2.1 Minified</a><span class="dw-tip">(recommended)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.3.3.js">jQuery.ScrollTo 1.3.3 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.3.3-min.js">jQuery.ScrollTo 1.3.3 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><em>I really advice using the minified versions. The code is optimized for those releases. Source versions should only serve to learn.</em><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-7073164068523618839?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/464i7h-HdO8" width="1"/></div>
    </content>
    <updated>2012-09-13T15:33:12Z</updated>
    <published>2008-03-11T00:44:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2008/03/jqueryserialscroll-120-released.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-8725107896989867168</id>
    <link href="http://flesler.blogspot.com/feeds/8725107896989867168/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=8725107896989867168" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/8725107896989867168?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/8725107896989867168?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/Wq52CvVGXJI/jquerylocalscroll-127-released.html" rel="alternate" type="text/html"/>
    <title>jQuery.LocalScroll 1.2.7 released</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">In this release I cleaned up the code a little and added some features. Also removed a few old (aka deprecated) stuff that were still hanging around.  <h4>Enhancements</h4><ul><li>Added some misc enhancements and cleanup the code.</li>
<li>Updated the plugin to take advantage of recent scrollTo additions.</li>
</ul><h4>Changes</h4><ul><li>The element that triggered the scroll cannot be accessed anymore from within the onBefore, you can bind your own click (or w/e) to them in order to add a class or things like that.</li>
<li>settings.persistent is no longer supported (was deprecated).</li>
</ul><h4>Features</h4><ul><li>The set of settings can be accessed from within the onBefore as the 'this'.</li>
<li>The hash (#foo) is set to the URL before scrolling, so the back button works accurately (when scrolling the window).</li>
<li>The option 'hash' doesn't make the window jump when scrolling overflown elements</li>
<li>$.localScroll.hash now resets the element scroll to (0,0) by default. You can set the setting 'reset' to false to avoid this.</li>
</ul><center>Enjoy!</center><h4>Links</h4><ul><li><a href="http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html" rel="start">Main post</a></li>
<li><a href="https://github.com/flesler/jquery.localScroll" target="_blank">Github Repo</a></li>
<li><a href="http://demos.flesler.com/jquery/localScroll/" target="_blank">Regular Demo</a></li>
<li><a href="http://demos.flesler.com/jquery/localScroll/ajax/" target="_blank">AJAX Demo</a></li>
<li><a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html">jQuery.ScrollTo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/" target="_blank">jQuery.ScrollTo's demo (must see)</a></li>
<li><a href="http://demos.flesler.com/jquery/localScroll/changes.txt" target="_blank">Changelog</a></li>
</ul><h4>Downloads</h4><ul><li><a href="http://flesler-plugins.googlecode.com/files/jquery.localScroll-1.2.7.js">jQuery.LocalScroll 1.2.7 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.localscroll-1.2.7-min.js">jQuery.LocalScroll 1.2.7 Minified</a><span class="dw-tip">(recommended)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1.js">jQuery.ScrollTo 1.4.3.1 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1-min.js">jQuery.ScrollTo 1.4.3.1 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-8725107896989867168?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/Wq52CvVGXJI" width="1"/></div>
    </content>
    <updated>2012-09-13T15:32:45Z</updated>
    <published>2009-03-11T23:12:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery.LocalScroll"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2009/03/jquerylocalscroll-127-released.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-6421971799272108495</id>
    <link href="http://flesler.blogspot.com/feeds/6421971799272108495/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=6421971799272108495" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/6421971799272108495?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/6421971799272108495?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/cA6Lu0Ywm3E/jqueryserialscroll-122-released.html" rel="alternate" type="text/html"/>
    <title>jQuery.SerialScroll 1.2.2 released</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h4>Enhancements</h4><ul><li>Removed the check that avoids re-scrolling to the same index, this might be desirable sometimes.</li>
<li>The settings object is exposed in the onBefore as the this.</li>
</ul><h4>Links</h4><ul><li><a href="http://flesler.blogspot.com/2008/02/jqueryserialscroll.html">Main Post</a></li>
<li><a href="https://github.com/flesler/jquery.serialScroll" target="_blank">Github Repo</a></li>
<li><a href="http://demos.flesler.com/jquery/serialScroll/" target="_blank">Demo</a></li>
<li><a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html">jQuery.ScrollTo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/" target="_blank">jQuery.ScrollTo's demo</a></li>
<li><a href="http://demos.flesler.com/jquery/serialScroll/changes.txt" target="_blank">Changelog</a></li>
</ul><h4>Downloads</h4><ul><li><a href="http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.2.js">jQuery.SerialScroll 1.2.2 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.2-min.js">jQuery.SerialScroll 1.2.2 Minified</a><span class="dw-tip">(recommended)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1.js">jQuery.ScrollTo 1.4.3.1 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1-min.js">jQuery.ScrollTo 1.4.3.1 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-6421971799272108495?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/cA6Lu0Ywm3E" width="1"/></div>
    </content>
    <updated>2012-09-13T15:32:01Z</updated>
    <published>2009-06-14T16:47:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery.SerialScroll"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2009/06/jqueryserialscroll-122-released.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>http://bassistance.de/?p=1290</id>
    <link href="http://bassistance.de/2012/09/07/release-validation-plugin-1-10-0/" rel="alternate" type="text/html"/>
    <title>Release: Validation Plugin 1.10.0</title>
    <summary>Wow, 11 months. It really has been 11 months since the 1.9.0 release. Interesting freelance times! Anyway, the jQuery validation plugin 1.10.0 is here! While the very recently launched Pledige.org campaign is just at the start, I hope this release helps convince you that the project isn’t dead. On the contrary, this release brings you [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Wow, 11 months. It really has been 11 months since the 1.9.0 release. Interesting freelance times!</p>
<p>Anyway, the <a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">jQuery validation plugin</a> 1.10.0 is here! While the very <a href="http://pledgie.com/campaigns/18159">recently launched Pledige.org campaign</a> is just at the start, I hope this release helps convince you that the project isn’t dead. On the contrary, this release brings you all the improvements that were built during those 11 months. A big chunk was contributed by <a href="https://twitter.com/maxlynch">Max Lynch</a>, kudos to him!</p>
<p>What changed? One cool new feature is the ability to specify messages with <code>data-</code> attributes. The next release should bring more html5y support like that, but for now you can put <code>data-msg="Please please fill out this field!"</code> into your markup, or specify one message per method: <code>data-msg-required="Really need this" data-msg-minlength="Moar characters please"</code> (please don’t use these messages in your application…).</p>
<p>Apart from that we’ve got a ton of updates on the outskirts: Localized messages now use their correct ISO codes, a lot of language files got added or improved. Additional methods got a few new citizens and updates to existing methods.</p>
<p>Backwards compatibility is still going strong: The plugin should work with anything from jQuery 1.3.x to 1.8.x.</p>
<p><strong><a href="http://jquery.bassistance.de/validate/jquery-validation-1.10.0.zip">Download this release.</a></strong></p>
<p>Don’t forget to <a href="http://pledgie.com/campaigns/18159">donate</a> and spread the word!</p>
<p><a href="http://www.pledgie.com/campaigns/18159"><img alt="Click here to lend your support to: jQuery Validation Plugin and make a donation at www.pledgie.com !" border="0" src="http://www.pledgie.com/campaigns/18159.png?skin_name=chrome" style="border: none;"/></a></p>
<p>The full changelog:</p>
<ul>
<li>Corrected French strings for nowhitespace, phoneUS, phoneUK and mobileUK based upon community feedback.</li>
<li>rename files for language_REGION according to the standard ISO_3166-1 (http://en.wikipedia.org/wiki/ISO_3166-1), for Taiwan tha language is Chinese (zh) and the region is Taiwan (TW)</li>
<li>Optimise RegEx patterns, especially for UK phone numbers.</li>
<li>Add Language Name for each file, rename the language code according to the standard ISO 639 for Estonian, Georgian, Ukrainian and Chinese (http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)</li>
<li>Added croatian (HR) localization</li>
<li>Existing French translations were edited and French translations for the additional methods were added.</li>
<li>Merged in changes for specifying custom error messages in data attributes</li>
<li>Updated UK Mobile phone number regex for new numbers. Fixes #154</li>
<li>Add element to success call with test. Fixes #60</li>
<li>Fixed regex for time additional method. Fixes #131</li>
<li>resetForm now clears old previousValue on form elements. Fixes #312</li>
<li>Added checkbox test to require_from_group and changed require_from_group to use elementValue. Fixes #359</li>
<li>Fixed dataFilter response issues in jQuery 1.5.2+. Fixes #405</li>
<li>Added jQuery Mobile demo. Fixes #249</li>
<li>Deoptimize findByName for correctness. Fixes #82 – $.validator.prototype.findByName breaks in IE7</li>
<li>Added US zip code support and test. Fixes #90</li>
<li>Changed lastElement to lastActive in keyup, skip validation on tab or empty element. Fixes #244</li>
<li>Removed number stripping from stripHtml. Fixes #2</li>
<li>Fixed invalid count on invalid to valid remote validation. Fixes #286</li>
<li>Add link to file_input to demo index</li>
<li>Moved old accept method to extension additional-method, added new accept method to handle standard browser mimetype filtering. Fixes #287 and supersedes #369</li>
<li>Disables blur event when onfocusout is set to false. Test added.</li>
<li>Fixed value issue for radio buttons and checkboxes. Fixes #363</li>
<li>Added test for rangeWords and fixed regex and bounds in method. Fixes #308</li>
<li>Fixed TinyMCE Demo and added link on demo page. Fixes #382</li>
<li>Changed localization message for min/max. Fixes #273</li>
<li>Added pseudo selector for text input types to fix issue with default empty type attribute. Added tests and some test markup. Fixes #217</li>
<li>Fixed delegate bug for dynamic-totals demo. Fixes #51</li>
<li>Fix incorrect message for alphanumeric validator</li>
<li>Removed incorrect false check on required attribute</li>
<li>required attribute fix for non-html5 browsers. Fixes #301</li>
<li>Added methods “require_from_group” and “skip_or_fill_minimum”</li>
<li>Use correct iso code for swedish</li>
<li>Updated demo HTML files to use HTML5 doctype</li>
<li>Fixed regex issue for decimals without leading zeroes. Added new methods test. Fixes #41</li>
<li>Introduce a elementValue method that normalizes only string values (don’t touch array value of multi-select). Fixes #116</li>
<li>Support for dynamically added submit buttons, and updated test case. Uses validateDelegate. Code from PR #9</li>
<li>Fix bad double quote in test fixtures</li>
<li>Fix maxWords method to include the upper bound, not exclude it. Fixes #284</li>
<li>Fixed grammar error in german range validator message. Fixes #315</li>
<li>Fixed handling of multiple class names for errorClass option. Test by Max Lynch. Fixes #280</li>
<li>Fix jQuery.format usage, should be $.validator.format. Fixes #329</li>
<li>Methods for ‘all’ UK phone numbers + UK postcodes</li>
<li>Pattern method: Convert string param to RegExp. Fixes issue #223</li>
<li>grammar error in german localization file</li>
<li>Added Estonian localization for messages</li>
<li>Improve tooltip handling on themerollered demo</li>
<li>Add type=”text” to input fields without type attribute to please qSA</li>
<li>Update themerollered demo to use tooltip to show errors as overlay.</li>
<li>Update themerollered demo to use latest jQuery UI (along with newer jQuery version). Move code around to speed up page load.</li>
<li>Fixed min error message broken in Japanese.</li>
<li>Update form plugin to latest version. Enhance the ajaxSubmit demo.</li>
<li>Drop dateDE and numberDE methods from classRuleSettings, leftover from moving those to localized methods</li>
<li>Passing submit event to submitHandler callback</li>
<li>Fixed #219 – Fix valid() on elements with dependency-callback or dependency-expression.</li>
<li>Improve build to remove dist dir to ensure only the current release gets zipped up</li>
<li>Bumping version to 2.0.0pre</li>
</ul>
<div>As usual:</div>
<ul>
<li>Please post questions to the <a href="http://forum.jquery.com/using-jquery-plugins">official Using jQuery Plugins Forum</a>, tagging your question with (at least) “validate”. Keep your question short and succinct and provide code; a testpage makes it much more likely that you get an useful answer in no time.</li>
<li>Please post bug reports and other contributions (enhancements, features, eg. new validation methods) to the <a href="https://github.com/jzaefferer/jquery-validation/issues">GitHub issue tracker</a></li>
</ul>
<p>Enjoy!</p></div>
    </content>
    <updated>2012-09-07T11:50:02Z</updated>
    <category term="jQuery"/>
    <author>
      <name>Jörn</name>
    </author>
    <source>
      <id>http://bassistance.de</id>
      <link href="http://bassistance.de/category/jquery/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://bassistance.de" rel="alternate" type="text/html"/>
      <subtitle>Jörn Zaefferer on Bass, Geeks and Rock'n'Roll</subtitle>
      <title>bassistance.de » jQuery</title>
      <updated>2012-09-18T03:14:10Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>http://bassistance.de/?p=1284</id>
    <link href="http://bassistance.de/2012/09/05/support-the-jquery-validation-plugin/" rel="alternate" type="text/html"/>
    <title>Support the jQuery Validation Plugin</title>
    <summary>Validate forms like you’ve never been validating before! This has been the, a tad silly, tag line for the jQuery Validation Plugin for a few years now. Back in 2006, when Jörn Zaefferer started that plugin, he was still employed as a Java developer, contributing to jQuery mostly in his free time. Of the half-dozens [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Validate forms like you’ve never been validating before!</strong></p>
<p><a href="http://www.pledgie.com/campaigns/18159"><img alt="Click here to lend your support to: jQuery Validation Plugin and make a donation at www.pledgie.com !" border="0" src="http://www.pledgie.com/campaigns/18159.png?skin_name=chrome" style="border: none;"/></a></p>
<p>This has been the, a tad silly, tag line for the <a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">jQuery Validation Plugin</a> for a few years now. Back in 2006, when Jörn Zaefferer started that plugin, he was still employed as a Java developer, contributing to jQuery mostly in his free time. Of the half-dozens plugins he started then, the Validation Plugin became the most succesful and is still quite popular today (<a href="http://trends.builtwith.com/javascript/jQuery-Validate">builtwith.com knows about more than 300.000 websites</a> using the plugin).</p>
<p>Since late 2010, when Jörn went freelance to focus on just JavaScript projects (no more Java!), maintenance of the plugin didn’t go as well as planned. Early 2012, appendTo was generous to support the project, namely with Max Lynch work through dozens of pull requests and issues, <a href="https://github.com/jzaefferer/jquery-validation/graphs/contributors">landing a total of 28 commits</a>. Since Max went on to create his own startup, the project went rather quiet again.</p>
<p>This is going to change! And you can be a part of that!</p>
<p>Jörn is looking for donations to spend quality time on the project. The roadmap below outlines a lot of work, probably a lot more than than can be covered by the 4000€ he’s currently asking for. </p>
<p>But that also depends on how much people will contribute in other ways. One part of this effort is  to build a community around the plugin.</p>
<p>How can you help?</p>
<p>There’s a few things you can do:</p>
<ul>
<li><a href="http://pledgie.com/campaigns/18159">You can directly donate to the campaign, any amount helps.</a></li>
<li>You ask your friends, coworkers, boss, spouse and whoever else, to help. If you’re part of a local JavaScript meetup, ask people there.</li>
<li>You can also help with the project itself: Look at the roadmap below and see if there’s something you can help with directly or indirectly. Know a good designer who could help with logo and website design? See if you can get them in touch with me. Know a technical writer who could help with website copy and documentation? Also very welcome!</li>
</ul>
<p><a href="http://pledgie.com/campaigns/18159">The campaign</a> also provides a detailed roadmap for what I’m planning to do with the plugin.</p>
<p><strong>Spread the word</strong></p>
<p>Help us get enough donations to get this project the attention it deserves. Share it on Twitter, Facebook, G+, Orkut, in your office, local newspaper, train station, airport, parliament! Call your senator!</p></div>
    </content>
    <updated>2012-09-05T15:14:28Z</updated>
    <category term="jQuery"/>
    <author>
      <name>Jörn</name>
    </author>
    <source>
      <id>http://bassistance.de</id>
      <link href="http://bassistance.de/category/jquery/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://bassistance.de" rel="alternate" type="text/html"/>
      <subtitle>Jörn Zaefferer on Bass, Geeks and Rock'n'Roll</subtitle>
      <title>bassistance.de » jQuery</title>
      <updated>2012-09-18T03:14:10Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-3388009296846798029</id>
    <link href="http://flesler.blogspot.com/feeds/3388009296846798029/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=3388009296846798029" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/3388009296846798029?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/3388009296846798029?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/9Lcd6yUIWu8/jqueryscrollto-141-released.html" rel="alternate" type="text/html"/>
    <title>jQuery.ScrollTo 1.4.1 released</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h4>Fixes</h4><ul><li>The plugin accepts floating numbers.</li>
<li>Using jQuery.nodeName where neccessary so that this works on xml+xhtml.</li>
<li>The max() internal function wasn't completely accurrate, now it is 98% (except for IE on quirks mode but it's not too noticeable).</li>
</ul><h4>Features</h4><ul><li>The target can be 'max' to scroll to the end while keeping it elegant.</li>
<li>The plugin works on quirks mode.</li>
</ul><h4>Enhancements</h4><ul><li>Default duration is 0 for jquery +1.3. Means sync animations.</li>
<li>Rewrote $.fn.scrollable() again. The plugin works on all major browsers (FF, IE, Safari, Opera, Chrome), on all versions, compat &amp; quirks modes, even for iframes.</li>
<li>In addition to window/document, if html or body are received, the plugin will choose the right one.</li>
</ul><h4>Links</h4><ul><li><a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html" rel="start">Main Post</a></li>
<li><a href="https://github.com/flesler/jquery.scrollTo" target="_blank">Github Repo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/" target="_blank">Demo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/changes.txt" target="_blank">Changelog</a></li>
</ul><h4>Downloads</h4><ul><li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1.js">jQuery.ScrollTo 1.4.3.1 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1-min.js">jQuery.ScrollTo 1.4.3.1 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-3388009296846798029?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/9Lcd6yUIWu8" width="1"/></div>
    </content>
    <updated>2012-09-04T17:14:27Z</updated>
    <published>2009-03-09T23:40:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery.ScrollTo"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2009/03/jqueryscrollto-141-released.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-6072323237597817865</id>
    <link href="http://flesler.blogspot.com/feeds/6072323237597817865/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=6072323237597817865" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/6072323237597817865?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/6072323237597817865?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/shpe20FjN-U/jqueryscrollto-142-released.html" rel="alternate" type="text/html"/>
    <title>jQuery.ScrollTo 1.4.2 released</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h4>Fixes</h4><ul><li>Fixing max calculations for regular DOM elements.</li>
</ul><h4>Features</h4><ul><li>The plugin support percentages as target ('50%' or {top:'50%', left:'45%'}).</li>
<li>Exposed the max() calculation as $.scrollTo.max.</li>
</ul><h4>Enhancements</h4><ul><li>Renamed $.fn.scrollable to $.fn._scrollable to avoid conflicts with other plugins.</li>
</ul><h4>Links</h4><ul><li><a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html" rel="start">Main Post</a></li>
<li><a href="https://github.com/flesler/jquery.scrollTo" target="_blank">Github Repo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/" target="_blank">Demo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/changes.txt" target="_blank">Changelog</a></li>
</ul><h4>Downloads</h4><ul><li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1.js">jQuery.ScrollTo 1.4.3.1 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1-min.js">jQuery.ScrollTo 1.4.3.1 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-6072323237597817865?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/shpe20FjN-U" width="1"/></div>
    </content>
    <updated>2012-09-04T17:12:48Z</updated>
    <published>2009-05-25T19:47:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery.ScrollTo"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2009/05/jqueryscrollto-142-released.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-6162029551504609611</id>
    <link href="http://flesler.blogspot.com/feeds/6162029551504609611/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=6162029551504609611" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/6162029551504609611?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/6162029551504609611?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/eARmQFUQudw/jqueryscrollto-14-released.html" rel="alternate" type="text/html"/>
    <title>jQuery.ScrollTo 1.4 released!</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h4>Fixes</h4><ul><li>Fixed the problem when scrolling the window to absolute positioned elements on Safari.</li>
<li>Fixed the problem on Opera 9.5 when scrolling the window. That it always scrolls to 0.</li>
</ul><h4>Features</h4><ul><li>Added the settings object as 2nd argument to the onAfter callback.</li>
<li>The 3rd argument of scrollTo can be just a function and it's used as the onAfter.</li>
<li>Added full support for iframes (even max scroll calculation).</li>
<li>Instead of $.scrollTo, $(window).scrollTo() and $(document).scrollTo() can be used(even for iframes).</li>
<li>Added $().scrollable() that returns the real element to scroll, f.e: $(window).scrollable() == [body|html], works for iframes too.</li>
</ul><p>I rewrote the scroll limit calculations part, in order to fix the 2 bugs. If you notice any problem, please report.</p><p>This version should be perfectly compatible with the latest versions of <a href="http://flesler.blogspot.com/2008/02/jqueryserialscroll.html" target="_blank">SerialScroll</a> and <a href="http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html" target="_blank">LocalScroll</a>.</p><p>I tested this only with jQuery 1.2.6 (from trunk) but it should work well even with pretty old versions of jQuery.</p><p>Tested my demos and some iframe experiments on IE 6/7, FF 2/3, Safari 3 and Opera 9.2/5. All worked as expected. Enjoy!</p><h4>Links</h4><ul><li><a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html" rel="start">Main Post</a></li>
<li><a href="https://github.com/flesler/jquery.scrollTo" target="_blank">Github Repo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/" target="_blank">Demo</a></li>
<li><a href="http://demos.flesler.com/jquery/scrollTo/changes.txt" target="_blank">Changelog</a></li>
</ul><h4>Downloads</h4><ul><li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1.js">jQuery.ScrollTo 1.4.3.1 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1-min.js">jQuery.ScrollTo 1.4.3.1 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-6162029551504609611?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/eARmQFUQudw" width="1"/></div>
    </content>
    <updated>2012-09-04T17:12:27Z</updated>
    <published>2008-09-11T03:32:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery.ScrollTo"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2008/09/jqueryscrollto-14-released.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://ejohn.org/?p=5816</id>
    <link href="http://ejohn.org/blog/introducing-khan-cs/" rel="alternate" type="text/html"/>
    <title>Redefining the Introduction to Computer Science</title>
    <summary>I’m incredibly excited to take this opportunity to announce a new project that I’ve been leading here at Khan Academy: Khan Academy Computer Science. We’re releasing a completely new platform that targets people with no programming knowledge and gives them an engaging and fun environment to learn in. Over everything else we wanted to emphasize [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I’m incredibly excited to take this opportunity to announce a new project that I’ve been leading here at Khan Academy: <a href="http://www.khanacademy.org/cs">Khan Academy Computer Science</a>.</p>
<p/><center><a href="http://www.khanacademy.org/cs"><img src="http://search.ukiyo-e.org/tmp/cs-flock-screenshot.sm.png"/></a></center>
<p>We’re releasing a completely new platform that targets people with no programming knowledge and gives them an engaging and fun environment to learn in.</p>
<p>Over everything else we wanted to emphasize creativity and exploration and make it approachable for people of all ages, including young kids.</p>
<p><a href="http://en.wikipedia.org/wiki/Salman_Khan_(educator)">Sal Khan</a> and I recorded a video giving a good introduction to what we’re releasing:</p>
<p/><center/>
<p>To get started feel free to visit the Khan Academy Computer Science site:</p>
<blockquote><p><a href="http://www.khanacademy.org/cs">http://www.khanacademy.org/cs</a></p></blockquote>
<p>Explore, play around, and build something!</p>
<blockquote><p>Jamie Wong, who worked on the CS platform this summer, has also <a href="http://jamie-wong.com/2012/08/14/khan-academy-computer-science/">written up a blog post</a> on his experience developing the platform.</p></blockquote>
<h3>Methodology</h3>
<p>Earlier this year I was working on an iteration of the CS platform which was heavily focused on structured curriculum leading towards exploratory projects.</p>
<p>Until I saw <a href="http://worrydream.com/">Bret Victor</a>‘s <a href="http://vimeo.com/36579366">mind-blowing talk on using a responsive programming environment</a>.</p>
<p>After watching that video I couldn’t shake the feeling that what he presented was a fundamentally different way of approaching how to interact with, and learn how to, code.</p>
<p>In an environment that is truly responsive you can completely change the model of how a student learns: rather than following the typical write -&gt; compile -&gt; guess it works -&gt; run tests to see if it worked model you can now immediately see the result and intuit how underlying systems inherently work without ever following an explicit explanation.</p>
<p>When code is so interactive, and the actual process of interacting with code is in-and-of-itself a learning process, it becomes very important to put code front-and-center to the learning experience.</p>
<p>Rather than starting Computer Science education off by explicitly teaching how a computer works or fundamental programming concepts (like variables, logic, control structures, etc.) you put the student into code of graduated complexity and encourage them to manipulate, explore, and write their own programs.</p>
<p>Once they start to explore and figure out things for themselves then they can begin to dig into all the explanatory tutorials and documentation that are provided to clarify how things work.</p>
<p>The desire to learn and understand can be a powerful accelerant for students and it’s something that <em>is completely missing from almost all Computer Science education</em>.</p>
<p>When I look back at how I became interested in programming, or ask other programmers about how they started to program, the answer is very frequently: “I was given a [Basic/QBasic/Python] compiler and a bunch of programs and I wanted to understand how it all worked so I could write my own!” It was only after digging in to the code that the student wanted to understand how to tackle certain programmatic challenges – but they then did so with great gusto!</p>
<p>The Khan Academy Computer Science program is a distillation of this process into it’s purest form: <strong>Directly encouraging experimentation, exploration, and creativity as a direct gateway to deeper learning.</strong></p>
<h3>How do we teach?</h3>
<p>On the site we provide dozens of programs, at a variety of skill levels, across a number of disciplines (including art, mathematics, and science). We wanted students to find the niche programs that could capture their excitement while also being able to provide a direct line from normally theoretical concepts (such as algebra, geometry, or physics) towards direct evidence of their utility in a tangible medium that the student can control.</p>
<p>We provide a number of tutorials that cover concepts that come up frequently in the programs that we’ve developed (from programming concepts like variables and conditionals to other concepts inherent to the medium such as drawing and animation). These tutorials should cover most of the questions that students have when they’re just beginning to program and can be accessed at a student’s leisure.</p>
<p>I’ve <a href="http://ejohn.org/blog/javascript-as-a-first-language/">talked before</a> about how I think that JavaScript, and specifically learning how to code in-browser, is inherently a better way of learning. Reducing the complexity of getting started down to zero will result in more people learning. Additionally the ubiquity of JavaScript only serves to educate people in a language that will be generally useful.</p>
<p>I also feel that learning how to code in an environment where the output is visual and highly enticing can better excite the student towards wanting to produce, and thus learn, more. I feel that purely textual coding environments (or coding environments that favor textual output over visual output) serve as a highly uninteresting introduction to programming.</p>
<p/><center><a href="http://www.khanacademy.org/cs/browse/all-programs"><img src="http://search.ukiyo-e.org/tmp/cs-projects.sm.png"/></a></center>
<p>At a fundamental level we want the students using the platform to be self-directed learners, choosing to drive the direction of their education in a way that best suits their interests.</p>
<p>We’ve taken some steps to provides students with some level of possible direction which they could follow, if interested. For example when viewing an introductory program that only does basic drawing we encourage the student to explore variables or animation — ways of bringing their program “to life” which simultaneously getting them excited about attempting to learn those, comparatively, complex subjects.</p>
<p>We already have a number of programs for students to explore, and we will be adding many more (highlighting some of the best from the community as well). With that being said we don’t want to be the sole arbiter of programs that a student might find to be interesting. For this reason we’re working to put community, sharing, and collaboration as pillars of the platform.</p>
<p>We want students to work up to the point at which they feel comfortable writing their own projects. We’ve already seen some pretty phenomenal output from both people here at Khan Academy  and from middle-school-aged students who’ve never programmed before.</p>
<p>Over this past summer we held a number of “<a href="http://www.khanacademy.org/about/discovery-lab">Discovery Lab</a>” sessions at Khan Academy in which kids of roughly middle school age did a number of learning activities. We had the opportunity to watch them interact with the Computer Science content and were blown away with what they created. In the first hour they were designing and drawing their own characters, in the second they had added in variables and were starting animations, by the end of the third hour they had functional draw loops and were adding in logic to control the animations.</p>
<p>We’ve never seen students of that age progress so quickly through such challenging concepts. It was noted that they were moving faster than most college age students taking a normal intro Computer Science course.</p>
<p><img src="http://search.ukiyo-e.org/tmp/cs-creeper.sm.png" style="float: right; margin: 0 0 0 10px;"/></p>
<p>One project that I particularly enjoyed was made by a student who really loved Minecraft. He designed some characters from the game (drawing them using a number of points and rectangles) and then added in some user interaction. He made it so that you could control the the position of a creeper by moving your mouse, as it came closer to “Steve” he would start to hiss and blink, upon hitting Steve he would explode into a firey cloud. This was done over the course of maybe four hours and two days.</p>
<p>To say that I’m excited to see how people are going to use this platform is an understatement.</p>
<h3>Coding Environment</h3>
<p>The environment is built around a two-panel view: The left being an <a href="http://ace.ajax.org/">Ace editor</a> and the right being a canvas.</p>
<p>All of the user’s code is written using JavaScript and uses <a href="http://processingjs.org/">Processing.js</a> to generate all the graphics.</p>
<p/><center><img src="http://search.ukiyo-e.org/tmp/cs-random-screenshot.sm.png"/></center>
<p>All code is executed in real-time. Not only is the code re-run (which is relatively easy to do, just re-evaling the code) but the code that you change is live dynamically injected into the runtime — this gives you the ability to change variables, colors, or even functions on the fly without the program ever restarting.</p>
<p>We did a lot to try and take advantage of the real-time nature of the environment, giving the user all sorts of tools to adjust the code, and thus the state of the program as well.</p>
<p>We have a number picker:<br/>
<img src="http://search.ukiyo-e.org/tmp/cs-number-picker-full.png"/></p>
<p>We have a color picker:<br/>
<img src="http://search.ukiyo-e.org/tmp/cs-color-picker-full.png"/></p>
<p>and we even have an image picker (using images from the always-excellent <a href="http://www.lostgarden.com">Lostgarden.com</a>):<br/>
<img src="http://search.ukiyo-e.org/tmp/cs-image-picker-full.png"/></p>
<p>We’ve also put a lot of work into the error correction. We build off of the existing linting that we do to try and provide extra levels of hinting. We do spelling correction, provide argument suggestions, and try to make suggestions for common beginner mistakes.</p>
<p/><center><img src="http://search.ukiyo-e.org/tmp/cs-error.png"/></center>
<p>In our experience students who’ve never programmed before can be left unattended using this environment and be able to resolve almost all of their issues via the error hints or the tutorials.</p>
<p>As it turns out it’s really, <em>really</em>, hard to build the real-time execution environment that Bret Victor proposed, in practice — even harder in a browser. I plan on writing many posts about the nuts-and-bolts of the implementation when we release the code-and-editor as Open Source (which should be soon).</p>
<p>To make the environment we have to use a lot of features that only the latest browsers support. For this reason we are only actively supporting Chrome, Firefox, Safari, and IE 9+. Chrome, Firefox, and Safari will have the best experience as they also have Web Worker support (which we make extensive use of).</p>
<p>Thankfully we’re able to make this hard call as less than 6% of our user base fails to match the above criteria — and that number is quickly shrinking.</p>
<blockquote><p>Side note: One area of the implementation that would benefit from an Open Source library is some form of in-browser, pure-JavaScript, ECMAScript 5 linter. We use <a href="http://www.jshint.com/">JSHint</a> right now and we’d really appreciate being able to enforce true strict mode (JSHint’s strict mode support is rather limited in nature).</p></blockquote>
<h3>Collaboration and Community</h3>
<p>With the Khan CS platform we wanted to provide an environment that effectively mimicked the best aspects of great programming communities like <a href="https://github.com/">Github</a>.</p>
<p>Students can always see the code associated with a project and it’s always displayed next to the output. Students can change any code they see and and save it to their own personal account (aka “forking” in the Github parlance).</p>
<p/><center><img src="http://search.ukiyo-e.org/tmp/cs-sharing.sm.png"/></center>
<p>(Note the authorship details and the “Based on” link with screenshot that shows up below a project that has been “forked” from another project.)</p>
<p>Community feedback and discussion is also large part of the benefit that we hope students will be able to derive from the platform. Students will be able to solicit feedback from others and have discussions within the context of their code. We’re not to the point of having line-level comments yet but we hope the initial discussion functionality will be very useful to everyone using the site.</p>
<p>To a large degree the Khan Computer Science platform is influenced by the Open Source communities that I’ve participated in: All the code is open, experimentation is encouraged, and feedback is easily provided. I feel that this particular environment is highly conducive to learning as you can easily see many ways of tackling a problem. You can also get feedback on your personal attempts, creating a tight feedback loop.</p>
<p>(I should note that we do have versioning baked in to the system as well but we haven’t exposed it yet, though probably will at some point.)</p>
<p>We also really wanted students to feel excited about sharing their work with others. We provide the ability to share it through traditional social media (Facebook, Twitter, and email) but also on the site and through their profile.</p>
<p/><center><img src="http://search.ukiyo-e.org/tmp/cs-profile.sm.png"/></center>
<p>On a student’s profile they have the ability to choose some explorations that they wish to explicitly share with others. We want students to take pride in their best work and feel open to sharing it with the world.</p>
<h3>Tutorials and Next Steps</h3>
<p>While students exploring the content of the platform will certainly learn some things simply by exploring and manipulating code, we wanted to go a step further and provide tutorials and a clear narrative to help students better understand some of the complex subject matter that they’re seeing.</p>
<p>The primary vehicle for learning is through the <a href="http://www.khanacademy.org/cs/tutorials/all-tutorials">tutorials</a> on the site. These are unique in that they both behave like a normal code editor but also as a “video” player. All of the tutorials include audio walkthroughs (playing live from <a href="http://developers.soundcloud.com">Soundcloud using their API</a>), combined with live playback from the presenter, right in the code editor itself.</p>
<p/><center><a href="http://www.khanacademy.org/cs/tutorials/all-tutorials"><img src="http://search.ukiyo-e.org/tmp/cs-video-screenshot.png"/></a></center>
<p>We wanted to have the playback take place directly in the editor to try and provide an experience for the student that was more immediate and tangible. Producing hard-coded video explanations or forcing the student to walk through step-by-step written instructions is both tedious and lacks interactivity. With this playback mechanism the student will be able to see the results live, exactly as they would always run in the editor, while also being able to pause the playback and manipulate, or copy, the code that they see. This ability to dig into the meat of a tutorial should serve to deepen, and reinforce, a student’s understanding of the subject matter.</p>
<p>In addition to the tutorials we have a large amount of <a href="http://www.khanacademy.org/cs/docs">documentation</a> on Processing.js and JavaScript, all of which is written up and available in a code editor (again, for further exploration). All documentation is available on a dedicated page and beneath every code editor, making it an easy reference for students.</p>
<p/><center><a href="http://www.khanacademy.org/cs/docs"><img src="http://search.ukiyo-e.org/tmp/cs-docs.png"/></a></center>
<p>Next to many of the projects that are on the site we also provide some suggested “Next Steps” that the students can follow for some deeper engagement and learning.</p>
<p/><center><img src="http://search.ukiyo-e.org/tmp/cs-next-steps.png"/></center>
<p>We don’t explicitly evaluate the student’s work here and instead we encourage them to share their work with others, providing an external motivator to try and write the best possible code they can. With the active and excited Khan Academy community that already exists students will be able to receive constructive feedback on their work and make a number of improvements thereon.</p>
<p>One question is obviously: How much “Computer Science” do we actually teach? Obviously, right now we’re not teaching very much in the way of traditional Computer Science content, we’ve placed far more focus onto the platform and feel that a lot can be gained from just what we’ve already built. We’re still very early on in the production of content and will be producing much more, of increasing complexity, over the upcoming weeks and months.</p>
<p>We decided that it was much more fruitful for us to tackle the most challenging problem that exists with Computer Science education first: Getting people excited about programming. If we can get people excited about programming, and build (or point them to) the resources they need to learn more then we will have been successful.</p>
<p>Eventually I think we’ll work to effectively replicate the materials one typically finds in a “Computer Science 101″ but in a way that is far more engaging and self-paced than what you would find at a traditional university.</p>
<p>So what’s next? We want to work on providing even more direction and tooling around students writing larger projects. We want to provide easy APIs around storage, network connectivity, and dependencies that will allow for some fascinating projects. Additionally we want to improve peer-to-peer and mentor-student collaboration, finding ways of pairing struggling students with skilled developers. Finally we want to produce a lot more content of a wide range of difficulties and topics.</p>
<p>We’re only just getting started and how the community responds to this release will largely help to drive the direction of the platform as a whole. Feedback is most welcome!</p>
<h3>Thank Yous</h3>
<p>This is the culmination of a bunch of work by a number of people and I want to take this opportunity to thank them — without them this project would not have happened and would not have come out as well as it did.</p>
<p>Most importantly I want to thank <a href="http://jamie-wong.com/">Jamie Wong</a> and <a href="http://cakefordinner.com/">Jessica Liu</a> — both of whom worked this summer on the Computer Science platform and have both made tremendous contributions in ways that I couldn’t have even hoped for.</p>
<p/><center><img src="http://www.khanacademy.org/images/headshots/interns/jamiew.png"/> <img src="http://www.khanacademy.org/images/headshots/interns/jessica.png"/></center>
<p>Jamie primarily worked on the Khan CS platform, providing a superb level of quality and scalability that we’ll be enjoying for a long time. He provided contributions above-and-beyond what was needed and even helped to improve some of our development processes at Khan Academy. His expertise has been a massive boon to the project, quickly escalating it to encompass functionality that we didn’t even hope we’d be able to provide. In the short time he’s been with the company he’s already made a tremendous impact upon the organization.</p>
<p>Jessica worked on creating Computer Science tutorials, meticulously researching methodologies and iterating after gathering user feedback. The structure and content of the Computer Science curriculum is largely of her design (if you view some of the CS tutorials you’re sure to enjoy much of her expertise and wit). She also worked on improving the usability of the editor and the curriculum, making it far easier for newbies to get up to speed. Her innate understanding of a new programmer’s mind, combined with her ability to execute on a solution that will aide them has made the platform an incredibly effective tool for self-paced learning.</p>
<p>I strongly hope to have the opportunity to work with both of them in the future.</p>
<p>I also want to thank everyone at Khan Academy for their input into the design process and their help in creating the awesome projects you see on the site. I especially want to thank Sal Khan, Shantanu Sinha, Ben Kamens, Jason Rosoff, Ben Komalo, Ben Alpert, Tom Yedwab, and Mathias Hiron for their help and advice in making the platform what it is today.</p>
<p>I also want to thank the teachers and students at the Khan Academy Discovery Lab for being such willing, and excited, participants in experimenting with the Computer Science platform. Your feedback was instrumental in identifying many issues that we were able to make much better as a result.</p>
<p>And so, on that note, I hope you will all enjoy the new <a href="http://www.khanacademy.org/cs">Khan Academy Computer Science</a> platform!</p>
<img height="1" src="http://feeds.feedburner.com/~r/JohnResig/~4/mq_cdZf25VY" width="1"/></div>
    </content>
    <updated>2012-08-14T17:35:19Z</updated>
    <category term="Blog"/>
    <author>
      <name>John Resig</name>
    </author>
    <source>
      <id>http://ejohn.org</id>
      <logo>http://ejohn.org/files/jeresig-wordpress-sm.jpg</logo>
      <link href="http://ejohn.org" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/JohnResig" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Blog, Projects, and Links</subtitle>
      <title>John Resig</title>
      <updated>2012-09-17T21:14:04Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://ejohn.org/?p=5809</id>
    <link href="http://ejohn.org/blog/secret-omens/" rel="alternate" type="text/html"/>
    <title>Secret Omens: Book Update</title>
    <summary>Jeff Atwood wrote up a post today on the merits of writing a technical book in this day-and-age and specifically called out my past post on programming book profits and my work-in-progress Secrets of the JavaScript Ninja. I wanted to give a brief status update on the book and how it’s going. I started the [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Jeff Atwood <a href="http://www.codinghorror.com/blog/2012/07/coding-horror-the-book.html">wrote up a post today</a> on the merits of writing a technical book in this day-and-age and specifically called out my past post on <a href="http://ejohn.org/blog/programming-book-profits/">programming book profits</a> and my work-in-progress <a href="http://jsninja.com/">Secrets of the JavaScript Ninja</a>.</p>
<p><img src="http://ejohn.org/files/ninja.74.jpg" style="float: right; margin-left: 10px;"/></p>
<p>I wanted to give a brief status update on the book and how it’s going. I started the book in early 2008 and was actually quite productive, finishing nearly the entire book that year (with some missing gaps that I fixed up in 2009). There was some work left to do to make it a better book but, honestly, I got caught up in coding and stopped focusing on writing. I had to prioritize my time and I chose to prioritize doing more development and focusing on my personal life. Some time last year Manning brought on a co-author, Bear Bibeault, to finish the book and get it out the door. He’s done a bunch of revision bringing it up-to-date and just the other week I finally wrote the preface. It’s in final revisions now and should be out-the-door <em>very soon</em>. This is a huge relief for me and it’s great that there’s one less thing to worry about.</p>
<p>To the point of Jeff’s post, I would absolutely not write a technical book again. It’s a tedious process and unless you LOVE writing and are really good at it (like <a href="http://www.nczonline.net/">Nicholas Zakas</a> or <a href="http://www.oreillynet.com/pub/au/156">Dave Flanagan</a>) then I suggest that you stick with the medium that is truly successful: Writing long-form articles/blog posts and possibly spinning them off into purchasable ebooks. (As an example, I’d point to <a href="http://perfectionkills.com/">Juriy Zaytsev</a> and <a href="http://www.quirksmode.org/">Peter-Paul Koch</a> both of whom could get any JavaScript position in the world purely based upon the quality of their articles and sites, without ever having written a book.)</p>
<p>I realized at some point in late 2008 that that’s really what I should’ve done with Secrets of the JavaScript Ninja but I was already neck-deep in the book with most of it complete. Ironically working on the book (or not working on it, however you look at it) actually compelled me to NOT blog more as every time I wanted to write a technical blog post I was forcing myself to make the decision “I’m writing about 1000 words on a technical matter, shouldn’t this just be going towards my uncompleted book?” and would just end up writing nothing as a result.</p>
<p>I do feel bad for, and apologize to, the people that pre-ordered hard copy version of my book over the years only to have to wait on a time scale comparable to George R. R. Martin’s writing schedule. Amusingly the book has been extremely successful as a <a href="http://www.manning.com/resig/">pre-order e-book at Manning.com</a> – it’s the best-selling MEAP book of all time. I’ve gotten numerous emails from readers who’ve gotten enormous benefit from the book, even in it’s rough form, and this has pleased me greatly.</p>
<p>I’m excited to finally have this book be out in the “wild”, as it were. It’s no longer (as Jeff put it) “permanently unfinished”.</p>
<p>I’ve included the preface from my book below, to give some more detail:</p>
<blockquote><p>When I started writing Secrets of the JavaScript Ninja four years ago, in early 2008, I saw a real need: There were no books providing in-depth coverage of the most important parts of the JavaScript language (functions, closures, and prototypes) nor were there any books that even attempted to cover writing truly cross-browser code. Unfortunately it appears as if the situation has not improved very well, which is truly surprising.</p>
<p>More and more development energy is being put into new technologies (such as the ones coming out of HTML 5 or the new versions of ECMAScript). There isn’t a point to diving into new technologies, or using the hottest libraries, if you don’t have a proper understanding of the fundamental characteristics of the JavaScript language. While the future for browser development is very bright the reality is that most development needs to make sure that code continues to work in the majority of browsers and for the majority of potential users.</p>
<p>Even though this book has been under development for a long time, thankfully it is not out of date. The book has been given a solid set of revisions by my co-author Bear Bibeault. He’s gone through and made sure that the material will continue to be relevant for a long time to come.</p>
<p>A major reason why this book has taken so long is largely due to the experience that I was drawing upon to write the material for the later chapters on cross-browser code. Much of my understanding of how cross-browser development happens in-the-wild has come from my work on the jQuery JavaScript library. As I was writing the later chapters on cross-browser development I realized that so much of jQuery’s core could be written differently, optimized, and made capable of handling a wider range of browsers.</p>
<p>Perhaps the largest change that came to jQuery, as a result of writing this book, was a complete overhaul from using browser-specific sniffing to using feature detection at the core of the library. This change made it so that jQuery could be used almost indefinitely, without assuming that browsers would always have specific bugs or be missing specific features.</p>
<p>As a result of these changes jQuery directly anticipated many of the improvements to browsers that have come during the past couple years: Google released the Chrome browser, the number of useragents have exploded as mobile computing has increased in popularity, Mozilla, Google, and Apple have gotten into a browser performance war, and Microsoft has finally started making substantial improvements to Internet Explorer. It can no longer be assumed that a single rendering engine (such as WebKit or Trident, in Internet Explorer) will always behave the same way. Substantial changes are occurring rapidly and are spread out to an ever-increasing number of users.</p>
<p>Using the techniques outlined in this book, jQuery’s cross-browser capabilities provide a fairly solid guarantee that code that you write with jQuery will work in a maximal number of browser environments. This guarantee has led to explosive growth in jQuery over the past four years, with it now being used in over 57% of the top 10,000 websites on the Internet, according to Builtwith.com.</p>
<p>The portions of this book that cover features that are relatively un-changing, such as code evaluation, with statements, and timers are continually being used in interesting ways. There are now a number of active programming languages that are built on top of, or compiled to, JavaScript: Such as CoffeeScript or Processing.js. These languages require complex language parsing, code evaluation, and scope manipulation in order to work effectively. While dynamic code evaluation has been maligned due to its complexity and potential for security issues, without it we would not have had the CoffeeScript programming language – which has gone on to influence the upcoming ECMAScript specification itself.</p>
<p>I’m personally making use of all of these features, even today, in my work at Khan Academy. Dynamic code evaluation in the browser is such a powerful feature: You can build in-browser programming environments and do crazy things like inject code into a live runtime. This can result in an extremely compelling way to learn computer programming and provide all sorts of capabilities that wouldn’t be possible in a traditional learning environment.</p>
<p>The future for browser development continues to be very strong and it’s largely due to the features encapsulated in JavaScript and in the browser APIs. Having a solid grasp of the most crucial parts of the JavaScript language, combined with a desire for writing code that’ll work in many browsers, will result in your code being elegant, fast, and ubiquitous.</p></blockquote>
<img height="1" src="http://feeds.feedburner.com/~r/JohnResig/~4/E40l_KTI-HQ" width="1"/></div>
    </content>
    <updated>2012-07-11T19:05:46Z</updated>
    <category term="Blog"/>
    <author>
      <name>John Resig</name>
    </author>
    <source>
      <id>http://ejohn.org</id>
      <logo>http://ejohn.org/files/jeresig-wordpress-sm.jpg</logo>
      <link href="http://ejohn.org" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/JohnResig" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Blog, Projects, and Links</subtitle>
      <title>John Resig</title>
      <updated>2012-09-17T21:14:04Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1991</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/H5gIZsbtr_Y/" rel="alternate" type="text/html"/>
    <title>jQuery 1.8 Beta 1: See What’s Coming (and Going!)</title>
    <summary>Hello fellow jQuery users! It’s been a while since you’ve heard from us, but we haven’t been asleep. The jQuery Core Team has been heads-down working on jQuery 1.8, and our first beta release is now available! You can get the code from the jQuery CDN: http://code.jquery.com/jquery-1.8b1.js Give it a try on your current jQuery [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hello fellow jQuery users! It’s been a while since you’ve heard from us, but we haven’t been asleep. The jQuery Core Team has been heads-down working on jQuery 1.8, and our first beta release is now available! You can get the code from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.8b1.js">http://code.jquery.com/jquery-1.8b1.js</a></li>
</ul>
<p>Give it a try on your current jQuery code and let us know how it works for you. If you experience issues, please <a href="http://bugs.jquery.com/">file a bug</a>, include a test case, and be sure to mention that you’re testing against jQuery 1.8 Beta 1.</p>
<p>There will be even more exciting jQuery news at the <a href="http://events.jquery.org">jQuery Conference</a> in San Francisco later this month, with blog posts to follow.</p>
<p>jQuery is now powering about one-half of all the major web sites on the Internet; that’s a great success, but we’re not standing still. Web browsers and the devices they run on have undergone an incredible metamorphosis in the past six years. The process of web development is evolving to accommodate the changes that are happening. In response, jQuery continues to evolve as well.</p>
<p>Part of that evolution is not just knowing what to add, but what to take away. jQuery’s plugin architecture makes it easy for developers to extend the functionality that jQuery Core offers when it makes sense for their own needs. For that reason, the bar has been set pretty high for additions to Core. We don’t want to create size, complexity, or performance penalties for people who don’t need specific features.</p>
<p>Similarly, we have enough experience with the way that people use jQuery to know some features that originally seemed like a good idea turned out to be a not-so-good idea. Rather than carry these around forever, we want to remove them eventually. In fact, we want to make it easier to create a version of jQuery that excludes things you don’t need or want, especially for mobile environments where space can be precious.</p>
<p>With that in mind, here are some changes we are planning for jQuery 1.8 that will make it a better foundation for all HTML-based web pages and applications, regardless of their platform:</p>
<h2>Modularity</h2>
<p>As of jQuery 1.8, you can build a custom version of jQuery that excludes one or more modules if you do not need their functionality. This capability is made easy by our new build system based on Ben Alman’s awesome <a href="http://gruntjs.com">grunt</a> tool. To build your own custom version, set up a copy of the jQuery core repo from Github and use the grunt command line options to exclude modules. For more information, see the <a href="https://github.com/jquery/jquery/blob/master/README.md">README file</a>.</p>
<p>The modules you can currently exclude are ajax, css, dimensions, effects, and offset. For example, if your application exclusively uses stylesheets and CSS animations via classes to control the visibility and size of items on the page, you could build a version without the css, dimensions, effects, and offset modules. If you didn’t need any of the optional modules, your custom build of jQuery would be about 21KB minified and gzipped. </p>
<p>Don’t worry though, building your own jQuery is completely optional. jQuery has always been, and will continue to be, distributed as a single file in both compressed and uncompressed form and available on CDNs. We still expect that to be the way most jQuery developers go, because it’s simple and painless. For example, when you include a jQuery plugin that you didn’t write, using the full jQuery ensures you won’t be bitten by some dependency lurking inside the plugin. </p>
<h2>Vendor-Prefixed CSS Properties</h2>
<p>The W3C had its heart in the right place when it came up with the idea to use vendor prefixes for CSS features that were not yet standardized, but it hasn’t resulted in a fairy-tale ending. Web developers are faced with the nightmare of including <em>all</em> the vendor-prefixed property names in stylesheets. jQuery 1.8 eases the pain a bit. We automatically take the non-prefixed property name and generate the prefix that is appropriate for the current browser, so you don’t have to. For example, on Chrome the jQuery call <code>$("#myscroll").css("marquee-direction", "backwards")</code> will set the CSS to <code>-webkit-marquee-direction: backwards</code>.</p>
<h2>Animation (Effects)</h2>
<p>Our code for animation had become a tangled mess over the past few years, and with 1.8 we hope we’ve brought the beast under control. It’s more than just a cleanup, though; there are several extension points that make it easier to add or modify animations. At the moment there is only <a href="https://gist.github.com/54829d408993526fe475">preliminary documentation</a> for the new features, but in this first beta our primary focus will be on ensuring that any existing animation code works properly.</p>
<p>Browsers are doing a much better job providing efficient animations today, particularly with CSS transitions. Yet there are still plenty of users who don’t have a browser capable of doing CSS-based animations. With jQuery 1.8 you get the best of both worlds. If you need to support older browsers without built-in animations, the new <code>$.Animation</code> provides a solid foundation and fixes many bugs from previous versions. If you need to target only modern browsers and their natively supported animations, you can do that and exclude the animation module entirely.</p>
<h2>Sizzle CSS Selector Engine</h2>
<p>jQuery’s selector engine has undergone a major rewrite in 1.8.  The most notable benefit of this rewrite is a widespread <a href="http://jsperf.com/jquery-id-init/4">performance improvement</a> of selector matching as well as improved shortcuts for the most common selectors.</p>
<p>Additionally, Sizzle handles many more edge cases and bugs, including improved support for multiple combinators (~ &gt; +) and better detection of browser bugs in <code>querySelectorAll</code>. See the bugs list below in the selector module for a complete list.</p>
<h2>XSS Protection</h2>
<p>By design, the <code>$()</code> method can create HTML elements, and will run scripts if it is passed a <code>&lt;script&gt;</code> tag with inline script or a <code>src</code> attribute. Developers have sometimes forgotten this, passing strings to jQuery that come from untrusted sources such as the URL or user input. In these cases, it is possible for someone to inject a script into the page that can steal cookies or compromise the page in some way. </p>
<p>These cross-site-scripting (XSS) attacks are common on many sites whether they use jQuery or not, but we want to ensure jQuery does not contribute to the problem. In jQuery 1.9 (the NEXT version following 1.8), we’re tightening down the “looks like HTML” rule for the <code>$()</code> method. A string will only be considered HTML if the first character is a less-than sign, otherwise it will be assumed to be a CSS selector. </p>
<p>As further protection against the inadvertent injection of scripts, jQuery 1.8 introduces a new method: <code>$.parseHTML</code>. It lets you specify strings as HTML and know that they will be parsed as HTML, something that <code>$()</code> cannot do since it also interprets strings as selectors. It also provides a way to parse HTML into a DOM fragment and control the execution of any scripts the HTML it may contain. This is particularly important in JavaScript environments controlled by <a href="http://www.w3.org/TR/CSP/">Content Security Policy</a> (CSP), since injected scripts may cause security warnings or exceptions.</p>
<p>For anything more than the simple case of creating single elements (e.g., <code>$("&lt;p/&gt;")</code>), and particularly for cases where strings are built from external data, we strongly recommend using <code>$.parseHTML</code>. As of jQuery 1.9, some HTML strings will no longer be recognized by <code>$()</code> as a result of these stricter rules. </p>
<h2>Spring Cleaning</h2>
<p>In jQuery 1.8 we’ll also be deprecating and removing “trip hazards”: APIs and features that are inefficient, ineffective or inadvisable. We realize that there will be existing jQuery code that still requires these features. To provide a low-hassle future upgrade path, we’ll be providing many of the deprecated items in a compatibility plugin after they are removed. You can follow the compatibility plugin as it is developed on its <a href="http://github.com/jquery/jquery-compat-1.9/">GitHub repo</a>.</p>
<p>Tickets below that begin with “Deprecate” or “Remove” tell the whole story of what is changed, but here are a few changes of particular note:</p>
<p><strong><code>$.browser</code>:</strong> Ever since jQuery 1.4, we’ve been evangelizing that browser detection via the user agent string is a bad idea. Yet we’ve been an enabler of bad practice by continuing to offer <code>$.browser</code>. As of jQuery 1.9 we’ll remove it entirely and you’ll need to use the 1.9 compat plugin. If your code isn’t weaned off browser detection yet, check out <a href="http://feeds.feedburner.com/jquery/">Modernizr</a> for a very thorough set of feature detections you can use instead. And of course, you’re welcome to read the tea leaves in the <code>navigator.userAgent</code> string directly, there’s nothing stopping you but your conscience.</p>
<p><strong><code>$.sub</code>:</strong> This method was introduced in jQuery 1.5, but hasn’t proved to be useful or robust enough to justify it staying in core. It will move to a compatibility plugin in jQuery 1.9.</p>
<p><strong>Global ajax events:</strong> Events such as <code>ajaxStart</code> fired by <code>$.ajax</code> can currently be attached to any element–even to elements that are not in a document at all! This creates an inefficient special case, so we are deprecating that behavior in 1.8. Ajax events should be attached only on <code>document</code> as of 1.9.</p>
<h2>And Much Much More…</h2>
<p>There are many other changes in 1.8, perhaps the easiest way to see what we’ve been up to is to look at the list of issues that are being fixed, which includes both features and bug fixes. Here is a snapshot of 1.8 as it stands today, but it’s not set in stone. We welcome your feedback about specific issues or the direction of jQuery in general! </p>
<h2>jQuery 1.8 Beta 1 Change Log</h2>
<p>The current change log of the 1.8 Beta 1 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8205">#8205</a>: JSONP random result is causing memory leak in IE8</li>
<li><a href="http://bugs.jquery.com/ticket/8653">#8653</a>: jQuery.param outputs "null" and "undefined" in the query string</li>
<li><a href="http://bugs.jquery.com/ticket/10285">#10285</a>: evalScript rcleanScript replacement fails in IE8</li>
<li><a href="http://bugs.jquery.com/ticket/10524">#10524</a>: jQuery.fn.load does not merge data parameter with jQuery.ajaxSetup</li>
<li><a href="http://bugs.jquery.com/ticket/10944">#10944</a>: $.ajax does not always return an object implementing the Promise interface</li>
<li><a href="http://bugs.jquery.com/ticket/11013">#11013</a>: Deprecate/remove async option from $.ajax</li>
<li><a href="http://bugs.jquery.com/ticket/11402">#11402</a>: evalScript function fails with error error 80020101 in IE</li>
<li><a href="http://bugs.jquery.com/ticket/11743">#11743</a>: jQuery silently ignores errors during script tag ajax request in $.appendTo()</li>
<li><a href="http://bugs.jquery.com/ticket/11778">#11778</a>: Cached XHR requests should still resolve asynchronously</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11153">#11153</a>: jQuery 1.7 Strips Carriage Returns in IE 8</li>
<li><a href="http://bugs.jquery.com/ticket/11212">#11212</a>: Sizzle.getText converts unbreakable space into whitespace on IE</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11767">#11767</a>: Support custom build without effects</li>
<li><a href="http://bugs.jquery.com/ticket/11789">#11789</a>: Update README to describe grunt build system</li>
<li><a href="http://bugs.jquery.com/ticket/11856">#11856</a>: modularize dimensions</li>
<li><a href="http://bugs.jquery.com/ticket/11857">#11857</a>: modularize css</li>
<li><a href="http://bugs.jquery.com/ticket/11865">#11865</a>: modularize offset</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10657">#10657</a>: Deprecate/remove jQuery#size() in favor of jQuery#length</li>
<li><a href="http://bugs.jquery.com/ticket/11290">#11290</a>: selector interpreted as HTML</li>
<li><a href="http://bugs.jquery.com/ticket/11470">#11470</a>: Adding a builtin readyP promise</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10373">#10373</a>: `document.defaultView` =&gt; `window`</li>
<li><a href="http://bugs.jquery.com/ticket/10413">#10413</a>: width, innerWidth, innerHeight, outerWidth, outerHeight are inaccurate for a "box-sizing: border-box" child of hidden parent</li>
<li><a href="http://bugs.jquery.com/ticket/10679">#10679</a>: CSS3 vendor prefix support</li>
<li><a href="http://bugs.jquery.com/ticket/11004">#11004</a>: getWH incorrectly removes padding and border width when box-sizing is border-box</li>
<li><a href="http://bugs.jquery.com/ticket/11787">#11787</a>: Remove jQuery.curCSS</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10589">#10589</a>: Remove $.fn.data("events")</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11010">#11010</a>: Make Deferred.then == Deferred.pipe like Promise/A</li>
<li><a href="http://bugs.jquery.com/ticket/11011">#11011</a>: Allow traditional options object for $.Callbacks flags</li>
<li><a href="http://bugs.jquery.com/ticket/11736">#11736</a>: Remove Deferred .isResolved() and .isRejected()</li>
<li><a href="http://bugs.jquery.com/ticket/11749">#11749</a>: Preserve context objects when multiple Deferred object are passed to $.when()</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6724">#6724</a>: wrong $(window).height() in mobile safari (iphone)</li>
<li><a href="http://bugs.jquery.com/ticket/10877">#10877</a>: Make outerWidth/Height a setter</li>
<li><a href="http://bugs.jquery.com/ticket/11293">#11293</a>: Reading width or outerWidth of empty TDs alters columns width values</li>
<li><a href="http://bugs.jquery.com/ticket/11604">#11604</a>: Switch $(elem).width(-val) from no-op to $(elem).width(0)</li>
<li><a href="http://bugs.jquery.com/ticket/11724">#11724</a>: $(document).height() changed in Firefox 12</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7109">#7109</a>: animate width starts with invalid width on webkit</li>
<li><a href="http://bugs.jquery.com/ticket/7157">#7157</a>: Animation callback shows element is still ":animated"</li>
<li><a href="http://bugs.jquery.com/ticket/8387">#8387</a>: flickering problem with jQuery 1.5 hide/show issue with inline and inline-block elements on webkit browsers</li>
<li><a href="http://bugs.jquery.com/ticket/8627">#8627</a>: .animate() fails on letterSpacing in IE (regression in 1.5.1)</li>
<li><a href="http://bugs.jquery.com/ticket/8892">#8892</a>: Callback is raised before objects are shown with fadeIn() and jQuery.fx.off = true</li>
<li><a href="http://bugs.jquery.com/ticket/9505">#9505</a>: animate() issue when mixing percentages and pixels in WebKit</li>
<li><a href="http://bugs.jquery.com/ticket/11635">#11635</a>: Explicit overflow:auto is overridden by inline overflow:hidden during animation</li>
<li><a href="http://bugs.jquery.com/ticket/11755">#11755</a>: animate and it aliases should not use :hidden selector</li>
<li><a href="http://bugs.jquery.com/ticket/11854">#11854</a>: percentage animations jump to end</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8545">#8545</a>: Leak with events in IE</li>
<li><a href="http://bugs.jquery.com/ticket/10067">#10067</a>: Firing $.ready on document.readyState === 'interactive' too</li>
<li><a href="http://bugs.jquery.com/ticket/11101">#11101</a>: Deprecate "exclusive" events option from trigger method</li>
<li><a href="http://bugs.jquery.com/ticket/11328">#11328</a>: Ctrl key doesn't set event.metaKey to true on Windows</li>
<li><a href="http://bugs.jquery.com/ticket/11500">#11500</a>: Bug : "change" event handler not executed when triggered manually on IE7 &amp; IE8</li>
<li><a href="http://bugs.jquery.com/ticket/11621">#11621</a>: Triggering a event on document doesn't bubble to window</li>
<li><a href="http://bugs.jquery.com/ticket/11718">#11718</a>: Deprecate .data() events</li>
<li><a href="http://bugs.jquery.com/ticket/11719">#11719</a>: Deprecate .bind("ready") event</li>
<li><a href="http://bugs.jquery.com/ticket/11731">#11731</a>: Deprecate "hover" pseudo-event</li>
<li><a href="http://bugs.jquery.com/ticket/11733">#11733</a>: Deprecate .load(), .unload(), and .error() methods</li>
<li><a href="http://bugs.jquery.com/ticket/11786">#11786</a>: Deprecate .toggle( handler, handler, … ) signature</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8894">#8894</a>: appendTo() and alike methods called after clone() returns incorrect jQuery set in IE</li>
<li><a href="http://bugs.jquery.com/ticket/10324">#10324</a>: Clone does not copy innerHTML of object element in IE9</li>
<li><a href="http://bugs.jquery.com/ticket/11231">#11231</a>: Append, Prepend, After, Before should accept an array as first argument</li>
<li><a href="http://bugs.jquery.com/ticket/11338">#11338</a>: Inconsistent behavior with .replaceWith() and disconnected nodes.</li>
<li><a href="http://bugs.jquery.com/ticket/11566">#11566</a>: node.append et al. does not work when node is a DocumentFragment</li>
<li><a href="http://bugs.jquery.com/ticket/11617">#11617</a>: Define a $.parseHTML method for creating HTML fragments</li>
</ul>
<h3>Offset</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10996">#10996</a>: Simplify offset()</li>
<li><a href="http://bugs.jquery.com/ticket/11823">#11823</a>: Remove webkitConvertPointFromNodeToPage</li>
</ul>
<h3>Selector</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3778">#3778</a>: selector matching issues</li>
<li><a href="http://bugs.jquery.com/ticket/5568">#5568</a>: Selectors behave differently with comments tags on FF/IE</li>
<li><a href="http://bugs.jquery.com/ticket/8473">#8473</a>: In IE9rc *[tabIndex] select all elements without tabindex also</li>
<li><a href="http://bugs.jquery.com/ticket/9400">#9400</a>: Deprecate :text, :radio, :checkbox, etc. selector extensions</li>
<li><a href="http://bugs.jquery.com/ticket/10003">#10003</a>: Regression/BC break from #6963</li>
<li><a href="http://bugs.jquery.com/ticket/10074">#10074</a>: Chaining two [] selector with :first not working</li>
<li><a href="http://bugs.jquery.com/ticket/10570">#10570</a>: :text selector throws an error in IE7 when there is a cross domain iframe on the page</li>
<li><a href="http://bugs.jquery.com/ticket/10697">#10697</a>: Sizzle revamp</li>
<li><a href="http://bugs.jquery.com/ticket/10809">#10809</a>: incorrect test using ".activeElement" in the :focus pseudo-class resolver</li>
<li><a href="http://bugs.jquery.com/ticket/11109">#11109</a>: Sizzle: Expr.relative truncates prematurely</li>
<li><a href="http://bugs.jquery.com/ticket/11814">#11814</a>: Sizzle's element-rooted QSA strategy (i.e. attaching a temporary id) does not account for comma and other other selector divisions</li>
<li><a href="http://bugs.jquery.com/ticket/11826">#11826</a>: Explore a parsed caching system for matchesSelector within Sizzle</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9385">#9385</a>: Deprecate jQuery.browser</li>
<li><a href="http://bugs.jquery.com/ticket/11439">#11439</a>: jQuery.support.parentNode used, but not defined any more.</li>
<li><a href="http://bugs.jquery.com/ticket/11721">#11721</a>: deprecate and remove internal uses of jQuery.support.boxModel</li>
<li><a href="http://bugs.jquery.com/ticket/11766">#11766</a>: Move jQuery.support to "unstable" status</li>
</ul>
<h3>Traversing</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9800">#9800</a>: New method: .addBack (supersedes .andSelf)</li>
<li><a href="http://bugs.jquery.com/ticket/11543">#11543</a>: .has doesn't work on detached elements</li>
<li><a href="http://bugs.jquery.com/ticket/11706">#11706</a>: `.has()` fails on document fragments</li>
<li><a href="http://bugs.jquery.com/ticket/11738">#11738</a>: Remove .closest(Array) returning Array</li>
</ul>
<h3>Unfiled</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11325">#11325</a>: Improve domManip/buildFragment/clean</li>
<li><a href="http://bugs.jquery.com/ticket/11435">#11435</a>: Obsolete test code to remove toJSON from .data's return value</li>
<li><a href="http://bugs.jquery.com/ticket/11777">#11777</a>: Add jQuery Core support for EditorConfig file</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/H5gIZsbtr_Y" width="1"/></div>
    </content>
    <updated>2012-06-22T19:49:03Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/06/22/jquery-1-8-beta-1-see-whats-coming-and-going/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1978</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/M9VPS9RXixA/" rel="alternate" type="text/html"/>
    <title>Just Added: Training at SF jQuery Conference!</title>
    <summary>In response to the flood of requests and emails, and our original promise to work on this, we’ve got an announcement: we’ve added a single day Beginner/Intermediate training right before the San Francisco jQuery Conference :) Tickets are on sale now (left side, below the fold). The training will be provided by our friends at Bocoup, [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In response to the flood of requests and emails, and our original promise to work on this, we’ve got an announcement: we’ve added a single day Beginner/Intermediate training right before the San Francisco jQuery Conference :)</p>
<p><a href="http://events.jquery.org/2012/sf/">Tickets are on sale now</a> (left side, below the fold). The training will be provided by our friends at <a href="http://www.bocoup.com">Bocoup</a>, and hosted by the ever-generous folks at <a href="http://www.microsoft.com">Microsoft</a>. Here’s a snippet of what Trainers Ben Alman and Rebecca Murphey will be covering:</p>
<blockquote><p>At Bocoup’s intermediate one-day jQuery training, you’ll work with jQuery veterans to build a foundation that will make you a stronger developer and get you prepared for all the great talks that you’ll see over the next two days. You’ll even learn the basics of creating your own jQuery plugin. Topics that will be covered include:</p>
<ul>
<li>The jQuery() function</li>
<li>Selecting &amp; Traversing</li>
<li>Manipulating the DOM</li>
<li>Making stuff happen with Events</li>
<li>AJAX</li>
<li>Enhancing with Effects</li>
<li>Extending jQuery with Plugins</li>
<li>jQuery UI</li>
<li>jQuery Mobile</li>
</ul>
</blockquote>
<p>To note: the training and conference are both in San Francisco, but take place in <em>different</em> locations. The training is in the heart of San Fran on Market Street, and the conference is about five to ten minutes from there, on the UCSF Mission Bay campus. Please also note that the conference and training require <em>separate</em> admission tickets, so make sure you’ve purchased both if you’d like to attend both.</p>
<p>We’re still working on the possibility of adding an Advanced training, but thus far have had mostly requests for beginner materials. So here that is :)</p>
<p>Hope you’ve all bought your tickets to the conference; can’t wait to see you there!</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/M9VPS9RXixA" width="1"/></div>
    </content>
    <updated>2012-05-04T00:03:03Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/05/03/just-added-training-at-sf-jquery-conference/</feedburner:origlink>
    <author>
      <name>Leah Silber</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1967</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/N4ySwx3Y0K8/" rel="alternate" type="text/html"/>
    <title>Getting Touchy About Patents</title>
    <summary>Touch events have become a hot topic for web developers as more and more companies move into the mobile space. Most of us know that touch events support single and multi-touch tracking. Some of us know the trickiness of working with touch and mouse at the same time. Fewer know that there are multiple touch [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Touch events have become a hot topic for web developers as more and more companies move into the mobile space. Most of us know that touch events support single and multi-touch tracking. Some of us know the trickiness of working with touch and mouse at the same time. Fewer know that there are multiple touch event models, and even fewer have tried to support multiple models at the same time. I’d like to talk about where we are today, how we got here, and the potential problems we may face in the future.</p>
<h2>A Brief History</h2>
<p>Back in 2007, Apple introduced the iPhone, and with it came touch events. Neil Roberts sums up the Apple implementation well in a <a href="http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/">SitePen article</a>: “Though at first the APIs seem a little sketchy, once you’ve learned them you should be able to do amazing things in your application.” Sure enough, we’ve seen plenty of amazing things, without too much complaint of the “sketchy” API. This model was later implemented by Android, Nokia, RIM, Opera, and others. Apple’s implementation is still only available in their private fork of WebKit; it wasn’t until the end of 2009 that <a href="http://trac.webkit.org/changeset/51981">touch events first appeared in the main WebKit repo</a>, coming from the Android implementation.</p>
<p>Also in 2009, the W3C started discussing a unified pointer model for DOM Level 3 Events. The idea was that touch (including multi-touch), pen/stylus, and mouse events would be coalesced into a single model, making it easy to support all pointer types at once. However, this was abandoned because the goal at the time was to keep the spec as small as possible in order to become a recommendation faster.</p>
<p>Another two years later (March 2011), Mozilla released Firefox 4, featuring <a href="https://developer.mozilla.org/en/DOM/Touch_events_(Mozilla_experimental)">their own flavor of touch events</a>. The Mozilla model is much closer to the mouse event model and the abandoned W3C model in that the event objects are flat; properties such as `event.pageX` exist and there is no touch list. If you want to track multiple touches, you can do so via the event’s `streamId`. Mozilla later deprecated this implementation in favor of an emerging W3C spec based on Apple’s model.</p>
<p>In January 2011, the W3C started drafting a <a href="http://dvcs.w3.org/hg/webevents/file/e4446bce8960/touchevents.html">Touch Events spec based on the WebKit implementation</a>. A few months later, it became a <a href="http://www.w3.org/TR/2011/WD-touch-events-20110505/">Working Draft</a>, and in December it became a <a href="http://www.w3.org/TR/2011/CR-touch-events-20111215/">Candidate Recommendation</a>. The next month, a <a href="http://www.w3.org/2012/01/touch-pag-charter">Patent Advisory Group</a> (PAG) was formed in order to investigate <a href="http://www.w3.org/2004/01/pp-impl/45559/status#disclosures">patents disclosed by Apple</a>. Apple’s absence from the Touch Events Working Group (WG) and their patent disclosure has caused the W3C to <a href="http://lists.w3.org/Archives/Public/public-hypertext-cg/2012JanMar/0043.html">stop work on the spec</a> and they do not plan to continue until the PAG has concluded and/or makes a recommendation to the WG. As of this writing, the PAG has not made a decision about the impact of the patents, but the group’s goal is to reach a speedy conclusion.</p>
<p>Meanwhile, Microsoft took a different approach to touch and has implemented their own <a href="http://msdn.microsoft.com/en-us/library/hh673557.aspx">pointer events</a> in IE10 with the <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh441233.aspx">MSPointerEvent object</a>. The MSPointerEvent object is similar to the original Mozilla implementation, in that the event objects are flat and contain a `pointerId` property. However, there are some important differences between MSPointer and all of the other models, which are touch-specific.</p>
<p><em>Note: The above is just a brief history of touch events on the Web; if you’re interested in the history of touch interfaces, you might want to check out Bill Buxton’s <a href="http://www.billbuxton.com/multitouchOverview.html">Multi-Touch Systems that I Have Known and Loved</a>.</em></p>
<h2>Pointer Events vs. Touch Events</h2>
<p>As mentioned above, generic pointer events such as the original W3C idea or MSPointer, have the benefit of supporting multiple pointer devices. In fact, with a Samsung tablet running Windows 8, mouse, pen, and fingers are all normalized to MSPointer; you can even use the `pointerType` property to determine which type of pointer is being used. In addition to supporting all current pointer devices, MSPointer is designed in such a way that future devices can easily be added, and existing code will automatically support the new device. Even better, MSPointer event objects have the same structure as other events, reducing the learning curve compared to the conglomerate of TouchEvent, TouchList, and Touch.</p>
<p>Another big difference between MSPointer and Touch is that MSPointer has support for hovering (over and out events). While most touch devices have a hardware limitation that doesn’t allow for hovering, Sony recently announced the <a href="http://developer.sonymobile.com/wp/2012/03/13/newest-sony-smartphone-announced-xperia-sola-bringing-magical-floating-touch-technology-video/">Xperia sola</a> with “magical floating touch technology.” This brings up an important issue: Touch Events were designed based on a specific device for a specific type of input. Pointer Events represent a completely different approach to input on the Web. While we’ve already covered how this impacts developers, it’s interesting to consider the impact on hardware manufacturers. In order for Apple to succeed with touch interfaces, they had to create a new event model. Innovation for new form factors and new input methods will either be stifled by the existing standards or will require a new set of APIs, following in Apple’s footsteps with the iPhone and Touch Events. Pointer Events provides a clean solution not only for developers, but for hardware manufacturers as well. It’s conceivable that in a few years developers could use Pointer Events as the only event model for pointers, leaving Mouse Events as a thing of the past.</p>
<h2>A Splintered Future</h2>
<p>Although the W3C is still planning to move forward with the Touch Events spec (pending a recommendation from the PAG), the future is unclear. Even if the PAG determines that Apple’s patents don’t apply and the spec becomes a W3C Recommendation, it’s not clear that Microsoft would implement such a model given the need for a multi-input event system in Windows. If the W3C were to change directions and start a Pointer Events spec, it’s not clear that Apple, or more broadly WebKit, would implement the new event model. It’s entirely possible that even with a W3C Recommendation, we’ll be stuck for years without a consistent event model across browsers and devices.</p>
<p>Regardless of which model the W3C chooses to pursue, jQuery is dedicated to filling in the gaps, just like we do for other events such as submit and change. We think the pointer event model is easier to use and more future-proof, and we hope that it can be standardized, even if Touch Events are standardized as well. However, we are only interested in normalizing to a W3C Recommendation, and will not provide custom pointer events if there is no official W3C specification. We’re working with the W3C and Microsoft to try to find the best way forward for our users and the Open Web.</p>
<h2>Call to Action: Microsoft to Submit Pointer Event Proposal</h2>
<p>We would like to publicly call upon Microsoft to submit a proposal to the W3C for Pointer Events. The Touch Events Working Group, and by extension various browser vendors, have stated interest in pointer events. The most effective way to proceed would be for Microsoft to officially submit a proposal to the W3C.</p>
<h2>Call to Action: Community to Experiment with Both Event Models</h2>
<p>We would also encourage the community to experiment with Touch and MSPointer. Play with the APIs, build apps, and provide feedback. If you’re interested in this, but don’t have the necessary hardware, consider pairing up with one or more local developers who do. While there are a lot of developers building on top of Touch, there are very few people building on top of MSPointer, and even fewer publicly comparing them. We encourage you to send your feedback directly to the <a href="http://lists.w3.org/Archives/Public/public-webevents/">W3C public-webevents mailing list</a>, but feel free to leave feedback here and we will pass it along.</p>
<h2>Call to Action: Submit Prior Art</h2>
<p>If you know of any prior art for multi-touch/touch lists, even outside of the Web, please <a href="http://lists.w3.org/Archives/Public/public-webevents/">get in touch with the W3C</a>. This includes programming models and APIs, especially those using events. This will help the Patent Advisory Group come to a conclusion sooner. Again, if you’d rather leave comments here, we will pass them along.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/N4ySwx3Y0K8" width="1"/></div>
    </content>
    <updated>2012-04-10T19:07:20Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/04/10/getting-touchy-about-patents/</feedburner:origlink>
    <author>
      <name>sgonzalez</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1940</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/jscAk1nTT50/" rel="alternate" type="text/html"/>
    <title>Bowling for jQuery – April 2012, Washington, D.C.</title>
    <summary>The jQuery team is going bowling and we’d love to have you join us! We’ll be spending the evening of Friday, April 13th at King Pinz in Leesburg, VA, a bit outside of Washington, DC. We’ll have a private room with 6 lanes from 6 to 10 PM. The night will feature unlimited bowling, dinner, desserts, [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The jQuery team is going bowling and we’d love to have you join us! We’ll be spending the evening of Friday, April 13th at <a href="http://www.kingpinzbowl.com/" target="_blank">King Pinz</a> in Leesburg, VA, a bit outside of Washington, DC. We’ll have a private room with 6 lanes from 6 to 10 PM. The night will feature unlimited bowling, dinner, desserts, drinks, and billiards. There’s even a cigar bar, if you’re into that!</p>
<p><img alt="King Pinz" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/29435195/bowling4jquery.jpg"/></p>
<p>Very limited space – <a href="http://bowling4jquery.eventbrite.com" title="Bowl with the jQuery Team">get your ticket</a> fast.</p>
<h3>Bowling</h3>
<ul>
<li>Private room with 6 lanes</li>
<li>Unlimited bowling (shoe rental included) for 4 hours</li>
<li>Cozy couches with cocktail tables</li>
<li>King Pinz: <a href="http://www.kingpinzbowl.com/photos.html">Photos</a></li>
<li>Private Room: <a href="http://www.armillaryinc.com/hosted/king_pinz/high_rollers_suite/high_rollers_suite.html">360 degree tour</a></li>
</ul>
<h3>Dinner</h3>
<ul>
<li>Appetizers, entrees, and desserts</li>
<li>All night</li>
</ul>
<h3>Drinks</h3>
<ul>
<li>Open bar</li>
<li>All night</li>
</ul>
<h3>Billiards</h3>
<ul>
<li>Private billiards table and lounge area</li>
</ul>
<h3>Cigar Bar</h3>
<ul>
<li><a href="http://www.kingpinzbowl.com/highrollers/index.htm">http://www.kingpinzbowl.com/highrollers/index.htm</a></li>
<li><a href="http://www.armillaryinc.com/hosted/king_pinz/high_rollers_lounge/high_rollers_lounge.html">360 degree tour</a></li>
</ul>
<h3>Prizes</h3>
<div>
<ul>
<li>1 winner gets a copy of Adobe Creative Suite Master Collection 5.5 (a $2,600 value)<br/>
<img alt="Adobe Creative Suite Master Collection 5.5" height="180" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/29435195/cs55mastercollection-1.png" width="160"/><br/>
Thanks Adobe.</li>
<li>There will be other prizes as well. Cool prizes. Must be present to win.</li>
</ul>
</div>
<h3>Who will be there?</h3>
<ul>
<li>Dave Methvin</li>
<li>Yehuda Katz</li>
<li>Leah Silber</li>
<li>Rick Waldron</li>
<li>Karl Swedberg</li>
<li>Adam J. Sontag</li>
<li>Scott González</li>
<li>Dan Heberden</li>
<li>Richard D. Worth</li>
<li>Corey Frang</li>
<li>Kris Borchers</li>
<li>You?</li>
</ul>
<h3>Sponsors</h3>
<p>Please join us in thanking our thouroughly awesome sponsors for this event:</p>
<p> </p>
<p><a href="http://www.customink.com/" title="CustomInk - Design T-shirts Online"><img alt="CustomInk Design T-shirts Online" height="72" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/29435195/customink.png" title="CustomInk.com" width="303"/></a></p>
<p> </p>
<p><a href="http://bocoup.com/" title="Bocoup - Open Web Technology by and for programmers"><img alt="Bocoup - Open Web Technology by and for programmers" height="71" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/29435195/bocoup.png" style="margin-left: 24px;" title="Bocoup.com" width="240"/></a></p>
<p> </p>
<p><a href="http://www.adobe.com/"><img alt="Adobe" height="160" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/29435195/adobe.png" width="160"/></a></p>
<p> </p>
<p><a href="http://fluidhire.com/" title="Fluidhire - Innovative Technology and New Media Recruiting"><img alt="Fluidhire - Innovative Technology and New Media Recruiting" height="65" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/29435195/fluidhire.png" width="270"/></a></p>
<p> </p>
<p><a href="http://modevux.com/" title="MoDevUX - a Mobile Development Conference Discussing All Things User Experience and Design"><img alt="MoDevUX" height="190" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/29435195/modevux.png" width="190"/></a></p>
<p> </p>
<p>We know you love jQuery and we love you for showing it.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/jscAk1nTT50" width="1"/></div>
    </content>
    <updated>2012-03-26T16:00:53Z</updated>
    <category term="Events"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/03/26/bowling-for-jquery-apr-2012-dc/</feedburner:origlink>
    <author>
      <name>Richard D. Worth</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1929</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/JAi4ROFMrBI/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7.2 Released</title>
    <summary>jQuery 1.7.2 is looking good! The release candidate went smoothly so we’ve made only one small change and are releasing it to your eager hands today. You can get the oven-fresh code from the jQuery CDN now, with Google and Microsoft CDNs soon to follow: http://code.jquery.com/jquery-1.7.2.min.js (minified, production) http://code.jquery.com/jquery-1.7.2.js (unminified, debug) Note: If you’re using [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>jQuery 1.7.2 is looking good! The release candidate went smoothly so we’ve made only <a href="http://bugs.jquery.com/ticket/11469">one small change</a> and are releasing it to your eager hands today. You can get the oven-fresh code from the jQuery CDN now, with Google and Microsoft CDNs soon to follow:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7.2.min.js">http://code.jquery.com/jquery-1.7.2.min.js</a> (minified, production)</li>
<li><a href="http://code.jquery.com/jquery-1.7.2.js">http://code.jquery.com/jquery-1.7.2.js</a> (unminified, debug)</li>
</ul>
<p><em>Note:</em> If you’re using jQuery Mobile, please use jQuery 1.7.2 only with jQuery Mobile 1.1. For previous versions of jQuery Mobile, stay with jQuery core 1.7.1 or earlier. </p>
<p>You can use the <a href="http://bugs.jquery.com">bug tracker</a> to report bugs; be sure to create a test case on <a href="http://jsfiddle.net">jsFiddle</a> so we can figure it out easily. If you’re not sure it’s a bug, ask on our <a href="http://forum.jquery.com">forum</a> or on <a href="http://stackoverflow.com/questions/tagged/jquery">StackOverflow</a>. Please <em>don’t</em> use the blog comments below to report bugs.</p>
<p>As always, this release wouldn’t have been possible without the hard work of many people. First, the jQuery Core Team:  gnarf, jaubourg, mikesherov, rwldrn, and timmywil. The support of the jQuery UI, Mobile, and Infrastructure teams was greatly appreciated as well, especially danheberden’s valiant struggle against Trac. </p>
<p>Community members like adebree, caii, cmc3cn, KYSergey, mathiasbynens, miskith, MrMamen, Orkel, pasky, SineSwiper, tavelli, and vlazar pitched in by reporting, verifying, and fixing bugs. Special jQuery Gold Leaf Cluster thanks to gibson042 and sindresorhus for their work in making 1.7.2 a great release. Don’t let these people have all the fun! If you’d like to contribute to the web’s most popular Javascript library, hop onto #jquery-dev on IRC or the Developing jQuery Core section on <a href="http://forum.jquery.com">our forum</a> and say hello!</p>
<p>Many thanks to Louis-Rémi Babé, who submitted a <a href="http://bugs.jquery.com/ticket/11469">patch to fix a regression with negative margin animations</a> a mere 30 minutes before the release!</p>
<h2>jQuery 1.7.2 Change Log</h2>
<p>Here’s the change log of the 1.7.2 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/4624">#4624</a>: Charset in default ajaxSettings.contentType</li>
<li><a href="http://bugs.jquery.com/ticket/10978">#10978</a>: jQuery.param() should allow non-native constructed objects as property values</li>
<li><a href="http://bugs.jquery.com/ticket/11264">#11264</a>: evalScript() uses defaults set by ajaxSetup()</li>
<li><a href="http://bugs.jquery.com/ticket/11426">#11426</a>: jQuery.ajax() always fails when requesting JPG images in IE</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5571">#5571</a>: Allow chaining when passing undefined to any setter in jQuery</li>
<li><a href="http://bugs.jquery.com/ticket/10828">#10828</a>: attr(“coords”) returns undefined in IE7</li>
<li><a href="http://bugs.jquery.com/ticket/10870">#10870</a>: Incorrect behaviour of $.removeAttr(“selected”)</li>
<li><a href="http://bugs.jquery.com/ticket/11316">#11316</a>: Consider looking through valHooks by element type first, then by nodeName instead of the other way around</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10692">#10692</a>: Configure the jshint options to more accurately match the style guide</li>
<li><a href="http://bugs.jquery.com/ticket/10693">#10693</a>: generalize the “test something in an iframe” code in unit tests</li>
<li><a href="http://bugs.jquery.com/ticket/10901">#10901</a>: have unit tests fail if the tester is running from file:// or doesn’t have PHP</li>
<li><a href="http://bugs.jquery.com/ticket/10902">#10902</a>: ability to test a built version of jQuery in unit tests</li>
<li><a href="http://bugs.jquery.com/ticket/10931">#10931</a>: Unit tests shouldn’t require internet access</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10466">#10466</a>: jQuery.param() mistakes wrapped primitives for deep objects</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10639">#10639</a>: outerWidth(true) and css(‘margin’) returning % instead of px in Webkit</li>
<li><a href="http://bugs.jquery.com/ticket/10754">#10754</a>: have jQuery.swap return the return of the callback instead of just executing it</li>
<li><a href="http://bugs.jquery.com/ticket/10782">#10782</a>: Incorrect calculating width</li>
<li><a href="http://bugs.jquery.com/ticket/10796">#10796</a>: Bug in IE7 with $(‘#el’).css.(‘background-position’)</li>
<li><a href="http://bugs.jquery.com/ticket/10858">#10858</a>: css.js regular expressions are incomplete</li>
<li><a href="http://bugs.jquery.com/ticket/11119">#11119</a>: The curCSS function only need  2 arguments</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11309">#11309</a>: hexadecimal-formatted data-* attributes parsed incorrectly</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11306">#11306</a>: calling .disable() or .lock() on a $.Callbacks object breaks its fired() status</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3838">#3838</a>: $(document).height() incorrect in IE6</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8498">#8498</a>: Animate Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/10006">#10006</a>: method show is not working as expected in all browsers when called for document fragment</li>
<li><a href="http://bugs.jquery.com/ticket/10848">#10848</a>: Animation toggling loses state tracking in certain atomic edge cases</li>
<li><a href="http://bugs.jquery.com/ticket/11415">#11415</a>: Silently ignore negative CSS values where they are illegal</li>
<li><a href="http://bugs.jquery.com/ticket/11415">#11469</a>: Negative margin in animations (.animate)</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8165">#8165</a>: .live(‘click’, handler) fires on disabled buttons with child elements in Chrome</li>
<li><a href="http://bugs.jquery.com/ticket/10819">#10819</a>: Eliminate “this.on.call(this, “</li>
<li><a href="http://bugs.jquery.com/ticket/10878">#10878</a>: $(“select”).live(“change”, function(){ …broken in IE8 in jQuery 1.7</li>
<li><a href="http://bugs.jquery.com/ticket/10961">#10961</a>: Error in XRegExp using jQuery 1.7.1 in IE6-9</li>
<li><a href="http://bugs.jquery.com/ticket/10970">#10970</a>: The .on() selector parameter doesn’t work with :not(:first) selector</li>
<li><a href="http://bugs.jquery.com/ticket/10984">#10984</a>: Cannot off() custom events ($.event.special)</li>
<li><a href="http://bugs.jquery.com/ticket/11021">#11021</a>: Hover hack mangles a namespace named “hover”</li>
<li><a href="http://bugs.jquery.com/ticket/11076">#11076</a>: .clone(true) loses delegation filters</li>
<li><a href="http://bugs.jquery.com/ticket/11130">#11130</a>: jQuery.fn.on: binding map with null selector ignores data</li>
<li><a href="http://bugs.jquery.com/ticket/11145">#11145</a>: $(document).on() not working with name=”disabled”</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9427">#9427</a>: Passing undefined to .text() does not trigger setter</li>
<li><a href="http://bugs.jquery.com/ticket/10753">#10753</a>: inline the evalScript function in manipulation.js as it’s only used once</li>
<li><a href="http://bugs.jquery.com/ticket/10864">#10864</a>: text() method on a document fragment always returns the empty string</li>
<li><a href="http://bugs.jquery.com/ticket/11055">#11055</a>: Update HTML5 Shim elements list to support latest html5shiv</li>
<li><a href="http://bugs.jquery.com/ticket/11217">#11217</a>: Append problem with webkit</li>
<li><a href="http://bugs.jquery.com/ticket/11291">#11291</a>: Cloning XMLDoc’s with HTML5 nodeName’s breaks on IE</li>
<li><a href="http://bugs.jquery.com/ticket/11323">#11323</a>: script tags with type=”text/ecmascript” leak into the DOM</li>
<li><a href="http://bugs.jquery.com/ticket/11356">#11356</a>: safeFragment memory leak</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10952">#10952</a>: .fired() doesn’t work on Callbacks object when it is flagged with “once”</li>
<li><a href="http://bugs.jquery.com/ticket/11257">#11257</a>: Wrong path to source files in test suite if PHP missing</li>
</ul>
<h3>Queue</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10967">#10967</a>: .promise() does not attach methods onto target</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7986">#7986</a>: Bug in $.support.boxModel if page has DIV-element CSS</li>
<li><a href="http://bugs.jquery.com/ticket/11048">#11048</a>: Support Tests affect layout for positioned elements in IE6-9</li>
<li><a href="http://bugs.jquery.com/ticket/11337">#11337</a>: Bug in $.support.reliableMarginRight</li>
</ul>
<h3>Traversing</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11370">#11370</a>: $(‘&lt;div&gt;’).siblings() throws exception</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/JAi4ROFMrBI" width="1"/></div>
    </content>
    <updated>2012-03-21T21:13:40Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/03/21/jquery-1-7-2-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1913</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/Qkc0MccCdpY/" rel="alternate" type="text/html"/>
    <title>Announcing the 2012 San Francisco jQuery Conference!</title>
    <summary>It’s that time of year again…time to talk about the next jQuery Conference! Mark your calendars for June 28th and 29th. By popular demand, the next jQuery Conference will be in San Francisco proper (as opposed to Mountain View), at the fantastic UCSF Mission Bay Conference Center. If you haven’t been to an event there before, some [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>It’s that time of year again…time to talk about <a href="http://events.jquery.com">the next jQuery Conference</a>!</p>
<p>Mark your calendars for June 28th and 29th. By popular demand, the next jQuery Conference will be in San Francisco proper (as opposed to Mountain View), at the fantastic <a href="http://www.acc-missionbayconferencecenter.com/" title="Mission May Conference Center">UCSF Mission Bay Conference Center</a>. If you <em>haven’t</em> been to an event there before, some highlights:</p>
<ul>
<li>Pretty much the best conference wifi we’ve ever worked with</li>
<li>Pretty much the best conference <em>food</em> we’ve ever eaten</li>
<li>Free flowing coffee, sodas and drinks all day long</li>
<li>Great space, with comfy seating, great AV, parking, easy access to public transit, space for partying, and so on and so on and so on</li>
</ul>
<p>We’re incredibly excited about the new space, and about the way the 2012 SF show is shaping up! We’re going slightly smaller and single track this year too, so things are a bit simplified, a lot more intimate, and there’s less general shuffling about. <strong><a href="http://events.jquery.org/2012/sf/">Registration is open now, and space is <em>extremely</em> limited</a>. </strong>Tickets have sold out pretty quickly in the past, and there are about 150 tickets less than last time!</p>
<h2>Call for Proposals</h2>
<p>We’ve opened a <a href="https://docs.google.com/spreadsheet/viewform?formkey=dDhrQk12dmJRbFF0d2NlODFmcTQ2X0E6MQ" title="Call for Speaking Proposals">call for speaking proposals</a>, which will remain open until May 13th. We encourage any and all to apply. In fact, we’re borrowing a page from JSConf’s playbook this year and doing an “inverted” call:  you’re encouraged to nominate your dream speaker (or anyone else) for a speaking slot on the subject of your choice. Of course, you’re welcome to nominate yourself!  We love to spice it up with new speakers, new topics, and pretty much whatever you can think of. <strong><a href="https://docs.google.com/spreadsheet/viewform?formkey=dDhrQk12dmJRbFF0d2NlODFmcTQ2X0E6MQ">Submit a proposal now</a></strong>!</p>
<h2>Sponsors</h2>
<p>Conferences are expensive. So is running an open source project. We couldn’t do <em>any</em> of it without your help and support… so listen up! If you work for a company that’s hiring, a company that wants some developer publicity, or a company looking to help out and give back to the community, send them our way. Take a look at <a href="http://events.jquery.org/2012/sf/assets/files/jq-sf-2012-prospectus.pdf">the conference prospectus</a> if you (or your bosses) are feeling generous :) Sponsorship benefits and mega karma points are both up for grabs…</p>
<h2>Training</h2>
<p>We’re still on the lookout for a space for training in SF on Wednesday, June 27th. If your company has a space, or you have an idea for a venue, please <a href="mailto:events@jquery.org">shoot us an email</a>, and we’ll be eternally grateful.</p>
<p>That’s it for today, folks. Keep an eye out for upcoming announcements about speakers, sponsors, training days and all varieties of miscellany. We’ll also be updating the conference site with things like venue details and after parties, so keep an eye on that one too. Lastly, as always, if you’ve got questions or comments, reach out or leave a note here.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/Qkc0MccCdpY" width="1"/></div>
    </content>
    <updated>2012-03-20T16:40:41Z</updated>
    <category term="Events"/>
    <category term="conference"/>
    <category term="san francisco"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/03/20/announcing-the-2012-san-francisco-jquery-conference/</feedburner:origlink>
    <author>
      <name>Leah Silber</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1907</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/Ck2et26nzM4/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7.2 RC1 Released</title>
    <summary>jQuery 1.7.2 will be arriving soon! To make sure that we’ve fixed the bugs voted “Most Likely to Annoy” without introducing any new bugs, we need your help in testing this release candidate. You can get the code from the jQuery CDN: http://code.jquery.com/jquery-1.7.2rc1.js It will only take a few minutes to drop in this latest [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>jQuery 1.7.2 will be arriving soon! To make sure that we’ve fixed the bugs voted “Most Likely to Annoy” without introducing any new bugs, we need your help in testing this release candidate. You can get the code from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7.2rc1.js">http://code.jquery.com/jquery-1.7.2rc1.js</a></li>
</ul>
<p>It will only take a few minutes to drop in this latest file and test it with your code. If you’ve got a lot of pages, the list of fixed bugs below may be a helpful guide for determining what to test. And of course, if you reported a bug or were affected by one listed below, please re-test to be sure we fixed it for good. We’ve tested it internally against the current builds of jQuery UI and jQuery Mobile. There is one compatibility issue with jQuery Mobile 1.1 RC1 that has already been fixed and will be addressed by their next release.</p>
<p>Looking for an even easier way to test your web site with the latest jQuery? On Windows you can use the excellent <a href="http://fiddler2.com/fiddler2/">Fiddler</a> tool and create an <a href="http://fiddler2.com/Fiddler2/help/AutoResponder.asp">AutoResponder rule</a> to point your HTTP script requests for jQuery to the file location above. Then you are testing your live web site with the latest jQuery on your PC, without having to edit any files at all! If you know of similar tools for other platforms, leave a message in the comments below.</p>
<p>If you are particularly interested in IE6 support, please help us out. We are having sporadic trouble running the unit tests in IE6. It hasn’t been possible for us to determine the cause of these problems, but the problem doesn’t happen consistently and the sheer size of our test suite may just be overwhelming a browser that is more than a decade old. If you observe any reproducible failures in real code, please let us know and try to provide the smallest possible test case.</p>
<p>You can use the <a href="http://bugs.jquery.com">bug tracker</a> to report bugs; be sure to create a test case on <a href="http://jsfiddle.net">jsFiddle</a> so we can figure it out easily. If you’re not sure it’s a bug, ask on our <a href="http://forum.jquery.com">forum</a> or on <a href="http://stackoverflow.com/questions/tagged/jquery">StackOverflow</a>. Please <em>don’t</em> use the blog comments below to report bugs.</p>
<h2>jQuery 1.7.2rc1 Change Log</h2>
<p>Here’s the current change log of the 1.7.2rc1 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/4624">#4624</a>: Charset in default ajaxSettings.contentType</li>
<li><a href="http://bugs.jquery.com/ticket/10978">#10978</a>: jQuery.param() should allow non-native constructed objects as property values</li>
<li><a href="http://bugs.jquery.com/ticket/11264">#11264</a>: evalScript() uses defaults set by ajaxSetup()</li>
<li><a href="http://bugs.jquery.com/ticket/11426">#11426</a>: jQuery.ajax() always fails when requesting JPG images in IE</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5571">#5571</a>: Allow chaining when passing undefined to any setter in jQuery</li>
<li><a href="http://bugs.jquery.com/ticket/10828">#10828</a>: attr(“coords”) returns undefined in IE7</li>
<li><a href="http://bugs.jquery.com/ticket/10870">#10870</a>: Incorrect behaviour of $.removeAttr(“selected”)</li>
<li><a href="http://bugs.jquery.com/ticket/11316">#11316</a>: Consider looking through valHooks by element type first, then by nodeName instead of the other way around</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10692">#10692</a>: Configure the jshint options to more accurately match the style guide</li>
<li><a href="http://bugs.jquery.com/ticket/10693">#10693</a>: generalize the “test something in an iframe” code in unit tests</li>
<li><a href="http://bugs.jquery.com/ticket/10901">#10901</a>: have unit tests fail if the tester is running from file:// or doesn’t have PHP</li>
<li><a href="http://bugs.jquery.com/ticket/10902">#10902</a>: ability to test a built version of jQuery in unit tests</li>
<li><a href="http://bugs.jquery.com/ticket/10931">#10931</a>: Unit tests shouldn’t require internet access</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10466">#10466</a>: jQuery.param() mistakes wrapped primitives for deep objects</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10639">#10639</a>: outerWidth(true) and css(‘margin’) returning % instead of px in Webkit</li>
<li><a href="http://bugs.jquery.com/ticket/10754">#10754</a>: have jQuery.swap return the return of the callback instead of just executing it</li>
<li><a href="http://bugs.jquery.com/ticket/10782">#10782</a>: Incorrect calculating width</li>
<li><a href="http://bugs.jquery.com/ticket/10796">#10796</a>: Bug in IE7 with $(‘#el’).css.(‘background-position’)</li>
<li><a href="http://bugs.jquery.com/ticket/10858">#10858</a>: css.js regular expressions are incomplete</li>
<li><a href="http://bugs.jquery.com/ticket/11119">#11119</a>: The curCSS function only need  2 arguments</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11309">#11309</a>: hexadecimal-formatted data-* attributes parsed incorrectly</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11306">#11306</a>: calling .disable() or .lock() on a $.Callbacks object breaks its fired() status</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3838">#3838</a>: $(document).height() incorrect in IE6</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8498">#8498</a>: Animate Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/10006">#10006</a>: method show is not working as expected in all browsers when called for document fragment</li>
<li><a href="http://bugs.jquery.com/ticket/10848">#10848</a>: Animation toggling loses state tracking in certain atomic edge cases</li>
<li><a href="http://bugs.jquery.com/ticket/11415">#11415</a>: Silently ignore negative CSS values where they are illegal</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8165">#8165</a>: .live(‘click’, handler) fires on disabled buttons with child elements in Chrome</li>
<li><a href="http://bugs.jquery.com/ticket/10819">#10819</a>: Eliminate “this.on.call(this, “</li>
<li><a href="http://bugs.jquery.com/ticket/10878">#10878</a>: $(“select”).live(“change”, function(){ …broken in IE8 in jQuery 1.7</li>
<li><a href="http://bugs.jquery.com/ticket/10961">#10961</a>: Error in XRegExp using jQuery 1.7.1 in IE6-9</li>
<li><a href="http://bugs.jquery.com/ticket/10970">#10970</a>: The .on() selector parameter doesn’t work with :not(:first) selector</li>
<li><a href="http://bugs.jquery.com/ticket/10984">#10984</a>: Cannot off() custom events ($.event.special)</li>
<li><a href="http://bugs.jquery.com/ticket/11021">#11021</a>: Hover hack mangles a namespace named “hover”</li>
<li><a href="http://bugs.jquery.com/ticket/11076">#11076</a>: .clone(true) loses delegation filters</li>
<li><a href="http://bugs.jquery.com/ticket/11130">#11130</a>: jQuery.fn.on: binding map with null selector ignores data</li>
<li><a href="http://bugs.jquery.com/ticket/11145">#11145</a>: $(document).on() not working with name=”disabled”</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9427">#9427</a>: Passing undefined to .text() does not trigger setter</li>
<li><a href="http://bugs.jquery.com/ticket/10753">#10753</a>: inline the evalScript function in manipulation.js as it’s only used once</li>
<li><a href="http://bugs.jquery.com/ticket/10864">#10864</a>: text() method on a document fragment always returns the empty string</li>
<li><a href="http://bugs.jquery.com/ticket/11055">#11055</a>: Update HTML5 Shim elements list to support latest html5shiv</li>
<li><a href="http://bugs.jquery.com/ticket/11217">#11217</a>: Append problem with webkit</li>
<li><a href="http://bugs.jquery.com/ticket/11291">#11291</a>: Cloning XMLDoc’s with HTML5 nodeName’s breaks on IE</li>
<li><a href="http://bugs.jquery.com/ticket/11323">#11323</a>: script tags with type=”text/ecmascript” leak into the DOM</li>
<li><a href="http://bugs.jquery.com/ticket/11356">#11356</a>: safeFragment memory leak</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10952">#10952</a>: .fired() doesn’t work on Callbacks object when it is flagged with “once”</li>
<li><a href="http://bugs.jquery.com/ticket/11257">#11257</a>: Wrong path to source files in test suite if PHP missing</li>
</ul>
<h3>Queue</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10967">#10967</a>: .promise() does not attach methods onto target</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7986">#7986</a>: Bug in $.support.boxModel if page has DIV-element CSS</li>
<li><a href="http://bugs.jquery.com/ticket/11048">#11048</a>: Support Tests affect layout for positioned elements in IE6-9</li>
<li><a href="http://bugs.jquery.com/ticket/11337">#11337</a>: Bug in $.support.reliableMarginRight</li>
</ul>
<h3>Traversing</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11370">#11370</a>: $(‘&lt;div&gt;’).siblings() throws exception</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/Ck2et26nzM4" width="1"/></div>
    </content>
    <updated>2012-03-09T19:38:48Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/03/09/jquery-1-7-2-rc1-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1899</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/6lXMbnhEHX0/" rel="alternate" type="text/html"/>
    <title>Announcing the jQuery Foundation</title>
    <summary>(BOSTON) — The jQuery Board, in conjunction with Software Freedom Conservancy, is proud to announce the formation of the jQuery Foundation, Inc., an independent organization that will manage jQuery, the Internet’s number one JavaScript library, and its constituent projects. The jQuery Board previously administered jQuery under the aegis of the Conservancy, a public charity that [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p dir="ltr">(BOSTON) — The jQuery Board, in conjunction with Software Freedom Conservancy, is proud to announce the formation of the jQuery Foundation, Inc., an independent organization that will manage jQuery, the Internet’s number one JavaScript library, and its constituent projects.</p>
<p>The jQuery Board previously administered jQuery under the aegis of the Conservancy, a public charity that acts as a non-profit home for free software projects.</p>
<p>The new jQuery Foundation is a non-profit trade association dedicated to supporting development of the jQuery Core, UI, and Mobile projects; providing jQuery documentation and support; and fostering the jQuery community.</p>
<p>Dave Methvin, who recently took over as the head of the jQuery Core development team, will also serve as the Foundation’s President. “jQuery is the most popular JavaScript library, and creating an autonomous organization is the next step in ensuring its future development and benefiting everyone who uses jQuery,” said Methvin. “We’ll be announcing several initiatives shortly, including the next jQuery Conference and other efforts driven by needs within the community and the project.”</p>
<p>“I’m extremely excited to see the jQuery Foundation springing to life. I’m glad that Dave Methvin is leading the foundation and the direction of the core library. He’s a good friend and exceedingly capable of moving jQuery forward,” said John Resig, who created the library in 2005. “Meanwhile, I’ve been spending more time focusing on improving the state of JavaScript and programming education at Khan Academy. I’m psyched to be a part of the jQuery core team and Foundation and can’t wait to see how jQuery grows in the upcoming years.”</p>
<p>“We are proud that the jQuery Board has built jQuery into a vibrant and successful Open Source community under Conservancy’s mentorship,” said Bradley Kuhn, Executive Director of the Software Freedom Conservancy. “Our mission includes helping member projects determine whether to form their own organization, and we’re pleased jQuery is the first Conservancy project to take that step.”</p>
<p>The jQuery Foundation would like to thank Joel G. Kinney of <a href="http://fortpoint.me/" title="Fort Point Legal">Fort Point Legal</a>, whose generous pro-bono counsel has been invaluable in transitioning to an independent organization. The Foundation is also proud to accept an honorary first donation from the <a href="http://www.linuxfund.org/" title="Linux Fund">Linux Fund</a>, which has chosen to continue its tradition of supporting the open source community with a contribution to the Foundation’s inaugural operating expense budget.</p>
<p><strong>About jQuery</strong><br/>
Created in 2005 by John Resig as a JavaScript library to provide an intuitive approach for working with the DOM and Ajax, jQuery has steadily gained popularity among the development community and is the most widely-adopted JavaScript library in use today.</p>
<p><strong>About the jQuery Foundation</strong><br/>
<a href="http://jquery.org" title="jQuery Foundation">The jQuery Foundation</a> is a non-profit trade association and the home of jQuery, the Internet’s number one JavaScript library.  Founded by a group of leading JavaScript developers and architects, the jQuery Foundation is dedicated to three goals:  supporting development of the jQuery Core, UI, and Mobile projects; providing jQuery documentation and support; and fostering the jQuery community.</p>
<p>jQuery Foundation, Inc. is a Delaware non-profit currently seeking IRS 501(c)(6) status.  Donations to the jQuery Foundation will be used to further the goals of the Foundation.  For more information, visit <a href="http://jquery.org/">http://jquery.org</a>.</p>
<p><strong>About Software Freedom Conservancy</strong><br/>
<a href="http://sfconservancy.org/" title="Software Freedom Conservancy">Software Freedom Conservancy </a>is a non-profit organization that helps promote, improve, develop and defend Free, Libre and Open Source software projects.  Conservancy is a home to twenty-eight software projects, each supported by a dedicated community of volunteers, developers, and users.  Conservancy’s projects include some of the most widely used software systems in the world across many application areas, including educational software deployed in schools around the globe, embedded software systems deployed in most consumer electronic devices, distributed version control developer tools, integrated library services systems, and widely used graphics and art programs.  A full list of Conservancy’s projects can be found at <a href="http://sfconservancy.org/members/current/">http://sfconservancy.org/members/current/</a>.  Conservancy provides to these projects the necessary infrastructure and not-for-profit support services to enable the project’s communities to focus on what they do best: creating innovative software and advancing computing for the public’s benefit.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/6lXMbnhEHX0" width="1"/></div>
    </content>
    <updated>2012-03-06T17:00:01Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/03/06/announcing-the-jquery-foundation/</feedburner:origlink>
    <author>
      <name>Adam J. Sontag</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-8640596986273216089.post-9160415973726711436</id>
    <link href="http://flesler.blogspot.com/feeds/9160415973726711436/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=8640596986273216089&amp;postID=9160415973726711436" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/9160415973726711436?v=2" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default/9160415973726711436?v=2" rel="self" type="application/atom+xml"/>
    <link href="http://feedproxy.google.com/~r/Flesler/~3/uL7cLENqoBw/xmlwriter-for-javascript.html" rel="alternate" type="text/html"/>
    <title>XMLWriter for Javascript</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h4>Introduction</h4>
This is a Javascript class, based on .NET's <a href="http://msdn2.microsoft.com/en-us/library/system.xml.xmltextwriter(VS.71).aspx" target="_blank">XMLTextWriter</a>.<br/>
This is <strong>not</strong> a port, but a reduced and adapted version.

<br/><br/>

<h4>Constructor</h4>
The constructor accepts 2 optional arguments: encoding, and version. You call it like this:
<pre class="js"><span class="keyword">var</span> xw = <span class="keyword">new</span> XMLWriter( <span class="string">'UTF-8'</span>, <span class="string">'1.0'</span> );
</pre>

<h4>Methods</h4>
Class instances have the following methods:<ul>
<li><h5>writeStartDocument([ bool standalone ])</h5>
Opens a new document, must be call on start, if standalone is specified, standalone="true/false" will be added to the header.
</li>
<li><h5>writeEndDocument()</h5>
Closes the active document, it's not really mandatory to call it.
</li>
<li><h5>writeDocType( string declarations )</h5>
Adds a doctype to the document, can be called at anytime. If specified, a doctype will be included in the generated xml, in this form:<br/>
&lt;!DOCTYPE root-element declarations&gt;
</li>
<li><h5>writeStartElement( string name [, string ns ] )</h5>
Creates a new node element with this name, and it becomes the active element. A namespace can be specified.
</li>
<li><h5>writeEndElement()</h5>
Closes the active element and goes up one level.
</li>
<li><h5>writeAttributeString( string attr, string value )</h5>
Adds an attribute to the active element.
</li>
<li><h5>writeString( string text )</h5>
Adds a text node to the active element.
</li>
<li><h5>writeElementString( string name, string txt [, string ns ] )</h5>
Shortcut method, creates an element, adds the text and closes  it.
</li>
<li><h5>writeCDATA( string text )</h5>
Adds a text node wrapped with CDATA, to the active element.
</li>
<li><h5>writeComment( string text )</h5>
Adds a comment node to the active element.
</li>
<li><h5>flush(): string</h5>
Generates the XML string and returns it.
</li>
<li><h5>close()</h5>
Closes the writer and cleans up.
</li>
<li><h5>getDocument()</h5>
Generates a real XMLDocument from the writer. This method doesn't belong to the original class.
</li>
</ul>

<h4>Formatting</h4>
You can choose whether the generated XML is formatted or not, and how. You can modify the following options for each instance or from XMLWriter.prototype to affect them all:<ul>
<li><h5 class="setting">encoding</h5> 'ISO-8859-1' by default.</li>
<li><h5 class="setting">version</h5> '1.0' by default.</li>
<li><h5 class="setting">formatting</h5> 'indented'(default) or 'none'.</li>
<li><h5 class="setting">indentChar</h5> '\t' by default, char to indent.</li>
<li><h5 class="setting">indentation</h5> # of chars added per level, 1 by default.</li>
<li><h5 class="setting">newLine</h5> '\n' by default, char to separate lines.</li>
</ul>
If you choose formatting = 'none', you don't need to modify indentChar, indentation or newLine.

<br/><br/>

<h4>Links</h4><ul>
<li><a href="http://demos.flesler.com/XMLWriter/" target="_blank">Demo</a></li>
<li><a href="http://www.opensource.org/licenses/bsd-license.php" target="_blank">License (BSD)</a></li>
<li><a href="http://aspnet.4guysfromrolla.com/articles/092403-1.aspx">.NET demo</a></li>
</ul>

<h4>Downloads</h4><ul>
<li><a href="http://flesler-plugins.googlecode.com/files/XMLWriter-1.0.0.js">XMLWriter 1.0.0 Source</a><span class="dw-tip">(to learn or test)</span></li>
<li><a href="http://flesler-plugins.googlecode.com/files/XMLWriter-1.0.0-min.js">XMLWriter 1.0.0 Minified</a><span class="dw-tip">(recommended)</span></li>
</ul><div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/8640596986273216089-9160415973726711436?l=flesler.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/Flesler/~4/uL7cLENqoBw" width="1"/></div>
    </content>
    <updated>2012-02-17T15:51:05Z</updated>
    <published>2008-03-12T13:23:00Z</published><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://flesler.blogspot.com/2008/03/xmlwriter-for-javascript.html</feedburner:origlink>
    <author>
      <name>Ariel Flesler</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/17700414222186772120</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-8640596986273216089</id>
      <category term="jQuery.AjaxFilter"/>
      <category term="jQuery.ScrollShow"/>
      <category term="jQuery"/>
      <category term="jQuery.Rule"/>
      <category term="Javascript"/>
      <category term="jQuery.Listen"/>
      <category term="jQuery.XHR"/>
      <category term="jQuery.LocalScroll"/>
      <category term="jQuery.SerialScroll"/>
      <category term="jQuery.Collection"/>
      <category term="Maxthon"/>
      <category term="jQuery.Preload"/>
      <category term="jQuery.Bubble"/>
      <category term="jQuery.Accessible"/>
      <category term="jQuery.ScrollTo"/>
      <author>
        <name>Ariel Flesler</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/17700414222186772120</uri>
      </author>
      <link href="http://flesler.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://flesler.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://www.blogger.com/feeds/8640596986273216089/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" rel="next" type="application/atom+xml"/>
      <link href="http://feeds.feedburner.com/Flesler" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by-sa/2.0/" rel="license" type="text/html"/>
      <subtitle>My jQuery plugins, and other scripts.</subtitle>
      <title>Ariel Flesler</title>
      <updated>2012-09-17T18:16:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://ejohn.org/?p=5804</id>
    <link href="http://ejohn.org/blog/image-similarity-search-wanted/" rel="alternate" type="text/html"/>
    <title>Image Similarity Search Wanted</title>
    <summary>I’ve been working on a few projects in my spare time and one service, in particular, would greatly benefit from a high quality image similarity search. I’ve been trying a number of the Open (and non-Open) Source tools (a great list of which is on Wikipedia here). Thus far none of the tools that I’ve [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I’ve been working on a few projects in my spare time and one service, in particular, would greatly benefit from a high quality image similarity search.</p>
<p>I’ve been trying a number of the Open (and non-Open) Source tools (a <a href="http://en.wikipedia.org/wiki/List_of_CBIR_engines">great list of which is on Wikipedia here</a>). Thus far none of the tools that I’ve found are of high-enough quality to warrant further pursuit. They either do simple color comparison, basic wavelet/outline comparison, or some form of hashing – none of which appears to work very well beyond basic images. Some of the best algorithms are either caught up in University research programs (generally unreleased) or are available as corporate search engines.</p>
<p>In an ideal world I’d like something with the quality of TinEye (I’d even be open to using TinEye’s commercial services but they haven’t gotten back to me as of yet – I suspect that they’re mostly interested in dealing with large corporate clients).</p>
<p>In short: Does anyone have a lead on a high quality image similarity search tool (using <a href="http://en.wikipedia.org/wiki/Content-based_image_retrieval">Content-Based Image Retrieval</a>)? I’m open to Open Source, closed source, or even paid API service – as long as it works well.</p>
<p><strong>Note:</strong> I’m looking to use this on a private collection of images, so a service like Google Image Search (or TinEye’s normal commercial API) are not suitable alternatives – they both search images on the open web.</p>
<img height="1" src="http://feeds.feedburner.com/~r/JohnResig/~4/sbXFHhvUJK4" width="1"/></div>
    </content>
    <updated>2012-02-13T21:44:31Z</updated>
    <category term="Blog"/>
    <author>
      <name>John Resig</name>
    </author>
    <source>
      <id>http://ejohn.org</id>
      <logo>http://ejohn.org/files/jeresig-wordpress-sm.jpg</logo>
      <link href="http://ejohn.org" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/JohnResig" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Blog, Projects, and Links</subtitle>
      <title>John Resig</title>
      <updated>2012-09-17T21:14:04Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1886</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/8xDTBQu8dQ8/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7.2 Beta 1 Released</title>
    <summary>Hey there Internets, it’s the jQuery Core team! We haven’t talked in a while, but over the holidays we were busy fixing the bugs you reported. The result of that hard work is jQuery 1.7.2 Beta 1. We decided to get a beta out by Groundhog Day so you wouldn’t be in the shadow of [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hey there Internets, it’s the jQuery Core team! We haven’t talked in a while, but over the holidays we were busy fixing the bugs you reported. The result of that hard work is jQuery 1.7.2 Beta 1. We decided to get a beta out by <a href="http://en.wikipedia.org/wiki/Groundhog_Day" title="Groundhog Day">Groundhog Day</a> so you wouldn’t be in the shadow of six more weeks of unfixed bugs. </p>
<p>You can get the code from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7.2b1.js">http://code.jquery.com/jquery-1.7.2b1.js</a></li>
</ul>
<p>Oh, we <em>know</em> what you’re thinking: <em>“Cool, a new version of jQuery; I’ll wait until the final release has been out a few weeks and then I’ll give it a try.”</em> Right, and then you’ll find some bug that keeps you from upgrading. Nothing makes us sadder than finishing up a release and only then seeing a report of a serious bug that could have been fixed earlier.</p>
<p>So please, come out of your burrow and try this beta with your code. Did we miss an old bug? Did we create a new bug that makes you feel like <a href="http://www.youtube.com/watch?v=eZbtAFq7dP8#t=5">Bill Murray waking up to “I Got You Babe?”</a> We want to know. You can use the <a href="http://bugs.jquery.com">bug tracker</a> to report bugs; be sure to create a test case on <a href="http://jsfiddle.net">jsFiddle</a> so we can figure it out easily. If you’re not sure it’s a bug, ask on our <a href="http://feeds.feedburner.com/forum.jquery.com">forum</a> or on <a href="http://stackoverflow.com/questions/tagged/jquery">StackOverflow</a>.</p>
<h2>jQuery 1.7.2b1 Change Log</h2>
<p>The current change log of the 1.7.2b1 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10978">#10978</a>: jQuery.param() should allow non-native constructed objects as property values</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5571">#5571</a>: Allow chaining when passing undefined to any setter in jQuery</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10692">#10692</a>: Configure the jshint options to more accurately match the style guide</li>
<li><a href="http://bugs.jquery.com/ticket/10902">#10902</a>: ability to test a built version of jQuery in unit tests</li>
<li><a href="http://bugs.jquery.com/ticket/10931">#10931</a>: Unit tests shouldn’t require internet access</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10466">#10466</a>: jQuery.param() mistakes wrapped primitives for deep objects</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10639">#10639</a>: outerWidth(true) and css(‘margin’) returning % instead of px in Webkit</li>
<li><a href="http://bugs.jquery.com/ticket/10754">#10754</a>: have jQuery.swap return the return of the callback instead of just executing it</li>
<li><a href="http://bugs.jquery.com/ticket/10782">#10782</a>: Incorrect calculating width</li>
<li><a href="http://bugs.jquery.com/ticket/10796">#10796</a>: Bug in IE7 with $(‘#el’).css.(‘background-position’)</li>
<li><a href="http://bugs.jquery.com/ticket/10858">#10858</a>: css.js regular expressions are incomplete</li>
<li><a href="http://bugs.jquery.com/ticket/11119">#11119</a>: The curCSS function only need  2 arguments</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8498">#8498</a>: Animate Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/10006">#10006</a>: method show is not working as expected in all browsers when called for document fragment</li>
<li><a href="http://bugs.jquery.com/ticket/10848">#10848</a>: Animation toggling loses state tracking in certain atomic edge cases</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8165">#8165</a>: .live(‘click’, handler) fires on disabled buttons with child elements in Chrome</li>
<li><a href="http://bugs.jquery.com/ticket/10819">#10819</a>: Eliminate “this.on.call(this, “</li>
<li><a href="http://bugs.jquery.com/ticket/10878">#10878</a>: $(“select”).live(“change”, function(){ …broken in IE8 in jQuery 1.7</li>
<li><a href="http://bugs.jquery.com/ticket/10961">#10961</a>: Error in XRegExp using jQuery 1.7.1 in IE6-9</li>
<li><a href="http://bugs.jquery.com/ticket/10970">#10970</a>: The .on() selector parameter doesn’t work with :not(:first) selector</li>
<li><a href="http://bugs.jquery.com/ticket/10984">#10984</a>: Cannot off() custom events ($.event.special)</li>
<li><a href="http://bugs.jquery.com/ticket/11021">#11021</a>: Hover hack mangles a namespace named “hover”</li>
<li><a href="http://bugs.jquery.com/ticket/11076">#11076</a>: .clone(true) loses delegation filters</li>
<li><a href="http://bugs.jquery.com/ticket/11130">#11130</a>: jQuery.fn.on: binding map with null selector ignores data</li>
<li><a href="http://bugs.jquery.com/ticket/11145">#11145</a>: $(document).on() not working with name=”disabled”</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9427">#9427</a>: Passing undefined to .text() does not trigger setter</li>
<li><a href="http://bugs.jquery.com/ticket/10753">#10753</a>: inline the evalScript function in manipulation.js as it’s only used once</li>
<li><a href="http://bugs.jquery.com/ticket/10864">#10864</a>: text() method on a document fragment always returns the empty string</li>
<li><a href="http://bugs.jquery.com/ticket/11055">#11055</a>: Update HTML5 Shim elements list to support latest html5shiv</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10952">#10952</a>: .fired() doesn’t work on Callbacks object when it is flagged with “once”</li>
<li><a href="http://bugs.jquery.com/ticket/11257">#11257</a>: Wrong path to source files in test suite if PHP missing</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11048">#11048</a>: Support Tests affect layout for positioned elements in IE6-9</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/8xDTBQu8dQ8" width="1"/></div>
    </content>
    <updated>2012-02-01T01:33:43Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2012/01/31/jquery-1-7-2-beta-1-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://benjaminsterling.com/?p=285</id>
    <link href="http://benjaminsterling.com/pagination-and-backbone-js/" rel="alternate" type="text/html"/>
    <title>Pagination and Backbone.js</title>
    <summary>I recently had to create some pagination for a backbone.js project I’ve been working on.  What I created has been working quite well but was not 100% happy with what I did.  Since I had a week off I figured I’d rewrite it as a mixin and clean up the approach.  Will have to work [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I recently had to create some pagination for a backbone.js project I’ve been working on.  What I created has been working quite well but was not 100% happy with what I did.  Since I had a week off I figured I’d rewrite it as a mixin and clean up the approach.  Will have to work it back into the project somehow but that is something to worry about later.</p>
<p>Let’s just jump right in there.  Some caveats: I am sure there is probably a better approach to some of the code, so please give some guidance on how it should be improved.  This code assumes that all the data is already loaded into the collection.  The set of data I was working with had a record count of about 28,000 items.  I’ve gone back and both on if having that much data loaded is a good or bad thing.  Of all the articles I’ve read there doesn’t seem to be a consensus.</p>
<p>The folder structure I am using is:</p>
<div class="gist" id="gist-1531733">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class="line" id="LC1">// Folder structure being used</div><div class="line" id="LC2">assets/</div><div class="line" id="LC3">	app/</div><div class="line" id="LC4">		collections/</div><div class="line" id="LC5">			tags.js</div><div class="line" id="LC6">		mixins/</div><div class="line" id="LC7">			pagination.js</div><div class="line" id="LC8">		models/</div><div class="line" id="LC9">			tag.js</div><div class="line" id="LC10">		views/</div><div class="line" id="LC11">			pagination.js</div><div class="line" id="LC12">			tags.js</div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1531733/16257c7af0002d56fa03e83946c28d2bb74fbfcc/folder%20structure" style="float: right;">view raw</a>
            <a href="https://gist.github.com/1531733#file_folder structure" style="float: right; margin-right: 10px; color: #666;">folder structure</a>
            <a href="https://gist.github.com/1531733">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The JSON structure I am dealing with:</p>
<div class="gist" id="gist-1531733">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class="line" id="LC1"><span class="x">{</span></div><div class="line" id="LC2"><span class="x">	"status":true,</span></div><div class="line" id="LC3"><span class="x">	"tags":[</span></div><div class="line" id="LC4"><span class="x">		{</span></div><div class="line" id="LC5"><span class="x">			"id":1,</span></div><div class="line" id="LC6"><span class="x">			"name":"A"</span></div><div class="line" id="LC7"><span class="x">		},...</span></div><div class="line" id="LC8"><span class="x">	]</span></div><div class="line" id="LC9"><span class="x">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1531733/73ffbfeaba8d5e0358c4d39ae2b591fb017847fe/tags_all.php" style="float: right;">view raw</a>
            <a href="https://gist.github.com/1531733#file_tags_all.php" style="float: right; margin-right: 10px; color: #666;">tags_all.php</a>
            <a href="https://gist.github.com/1531733">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The model, nothing too special going on here:</p>
<div class="gist" id="gist-1531733">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class="line" id="LC1"><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">models</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC2">	<span class="nx">models</span><span class="p">.</span><span class="nx">Tag</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">extend</span><span class="p">({});</span></div><div class="line" id="LC3"><span class="p">})(</span><span class="nx">App</span><span class="p">.</span><span class="nx">models</span><span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1531733/27bb8580fd552d4c4a23010679613e9961fa44d1/models_tag.js" style="float: right;">view raw</a>
            <a href="https://gist.github.com/1531733#file_models_tag.js" style="float: right; margin-right: 10px; color: #666;">models_tag.js</a>
            <a href="https://gist.github.com/1531733">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The collection, again, is a pretty basic set up.  I’ve set to model to map to App.models.Tag, our url to point to tags_all.php and overridden the parse method to return a cleaned up tags array.</p>
<p>The last line <em>_.extend(collections.Tags.prototype, pagination); </em>is where we mixin in our Pagination module(?: not sure what its proper name is actually. Module, Class?).</p>
<div class="gist" id="gist-1531733">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class="line" id="LC1"><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">collections</span><span class="p">,</span> <span class="nx">pagination</span><span class="p">,</span> <span class="nx">model</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC2">	<span class="nx">collections</span><span class="p">.</span><span class="nx">Tags</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Collection</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span></div><div class="line" id="LC3">		<span class="nx">model</span> <span class="o">:</span> <span class="nx">model</span><span class="p">,</span></div><div class="line" id="LC4">		<span class="nx">url</span> <span class="o">:</span> <span class="s1">'tags_all.php'</span><span class="p">,</span></div><div class="line" id="LC5"><br/></div><div class="line" id="LC6">		<span class="cm">/**</span></div><div class="line" id="LC7"><span class="cm">		 * @param resp the response returned by the server</span></div><div class="line" id="LC8"><span class="cm">		 * @returns (Array) tags</span></div><div class="line" id="LC9"><span class="cm">		 */</span></div><div class="line" id="LC10">		<span class="nx">parse</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">resp</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC11">			<span class="kd">var</span> <span class="nx">tags</span> <span class="o">=</span> <span class="nx">resp</span><span class="p">.</span><span class="nx">tags</span><span class="p">;</span></div><div class="line" id="LC12"><br/></div><div class="line" id="LC13">			<span class="k">return</span> <span class="nx">tags</span><span class="p">;</span></div><div class="line" id="LC14">		<span class="p">}</span></div><div class="line" id="LC15">	<span class="p">});</span></div><div class="line" id="LC16"><br/></div><div class="line" id="LC17">	<span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="nx">collections</span><span class="p">.</span><span class="nx">Tags</span><span class="p">.</span><span class="nx">prototype</span><span class="p">,</span> <span class="nx">pagination</span><span class="p">);</span></div><div class="line" id="LC18"><span class="p">})(</span><span class="nx">App</span><span class="p">.</span><span class="nx">collections</span><span class="p">,</span> <span class="nx">App</span><span class="p">.</span><span class="nx">mixins</span><span class="p">.</span><span class="nx">Pagination</span><span class="p">,</span> <span class="nx">App</span><span class="p">.</span><span class="nx">models</span><span class="p">.</span><span class="nx">Tag</span><span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1531733/dbaac1900cf64f140359feabd62b72e1a76f5e7f/collections_tags.js" style="float: right;">view raw</a>
            <a href="https://gist.github.com/1531733#file_collections_tags.js" style="float: right; margin-right: 10px; color: #666;">collections_tags.js</a>
            <a href="https://gist.github.com/1531733">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Next up is the Pagination mixin code, have a read of it and I’ll comment after the code.</p>
<div class="gist" id="gist-1531733">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class="line" id="LC1"><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">mixins</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC2">	<span class="cm">/**</span></div><div class="line" id="LC3"><span class="cm">	 * @class</span></div><div class="line" id="LC4"><span class="cm">	 * Pagination</span></div><div class="line" id="LC5"><span class="cm">	 */</span></div><div class="line" id="LC6">	<span class="nx">mixins</span><span class="p">.</span><span class="nx">Pagination</span> <span class="o">=</span> <span class="p">{</span></div><div class="line" id="LC7">		<span class="cm">/**  how many items to show per page */</span></div><div class="line" id="LC8">		<span class="nx">perPage</span> <span class="o">:</span> <span class="mi">20</span><span class="p">,</span></div><div class="line" id="LC9"><br/></div><div class="line" id="LC10">		<span class="cm">/** page to start off on */</span></div><div class="line" id="LC11">		<span class="nx">page</span> <span class="o">:</span> <span class="mi">1</span><span class="p">,</span></div><div class="line" id="LC12"><br/></div><div class="line" id="LC13">		<span class="cm">/**</span></div><div class="line" id="LC14"><span class="cm">		 *</span></div><div class="line" id="LC15"><span class="cm">		 */</span></div><div class="line" id="LC16">		<span class="nx">nextPage</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC17">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC18"><br/></div><div class="line" id="LC19">			<span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">=</span> <span class="o">++</span><span class="nx">self</span><span class="p">.</span><span class="nx">page</span><span class="p">;</span></div><div class="line" id="LC20">			<span class="nx">self</span><span class="p">.</span><span class="nx">pager</span><span class="p">();</span></div><div class="line" id="LC21">		<span class="p">},</span></div><div class="line" id="LC22"><br/></div><div class="line" id="LC23">		<span class="nx">previousPage</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC24">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC25"><br/></div><div class="line" id="LC26">			<span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">=</span> <span class="o">--</span><span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">||</span> <span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC27">			<span class="nx">self</span><span class="p">.</span><span class="nx">pager</span><span class="p">();</span></div><div class="line" id="LC28">		<span class="p">},</span></div><div class="line" id="LC29"><br/></div><div class="line" id="LC30">		<span class="nx">goTo</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">page</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC31">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC32"><br/></div><div class="line" id="LC33">			<span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">=</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">page</span><span class="p">,</span><span class="mi">10</span><span class="p">);</span></div><div class="line" id="LC34">			<span class="nx">self</span><span class="p">.</span><span class="nx">pager</span><span class="p">();</span></div><div class="line" id="LC35">		<span class="p">},</span></div><div class="line" id="LC36"><br/></div><div class="line" id="LC37">		<span class="nx">howManyPer</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">perPage</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC38">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC39">			<span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC40">			<span class="nx">self</span><span class="p">.</span><span class="nx">perPage</span> <span class="o">=</span> <span class="nx">perPage</span><span class="p">;</span></div><div class="line" id="LC41">			<span class="nx">self</span><span class="p">.</span><span class="nx">pager</span><span class="p">();</span></div><div class="line" id="LC42">		<span class="p">},</span></div><div class="line" id="LC43"><br/></div><div class="line" id="LC44">		<span class="nx">setSort</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">column</span><span class="p">,</span> <span class="nx">direction</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC45">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC46"><br/></div><div class="line" id="LC47">			<span class="nx">self</span><span class="p">.</span><span class="nx">pager</span><span class="p">(</span><span class="nx">column</span><span class="p">,</span> <span class="nx">direction</span><span class="p">);</span></div><div class="line" id="LC48">		<span class="p">},</span></div><div class="line" id="LC49"><br/></div><div class="line" id="LC50">		<span class="nx">pager</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">sort</span><span class="p">,</span> <span class="nx">direction</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC51">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">,</span></div><div class="line" id="LC52">				<span class="nx">start</span> <span class="o">=</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">page</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="k">this</span><span class="p">.</span><span class="nx">perPage</span><span class="p">,</span></div><div class="line" id="LC53">				<span class="nx">stop</span>  <span class="o">=</span> <span class="nx">start</span><span class="o">+</span><span class="nx">self</span><span class="p">.</span><span class="nx">perPage</span><span class="p">;</span></div><div class="line" id="LC54"><br/></div><div class="line" id="LC55">			<span class="k">if</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">orgmodels</span> <span class="o">===</span> <span class="kc">undefined</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC56">				<span class="nx">self</span><span class="p">.</span><span class="nx">orgmodels</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">models</span><span class="p">;</span></div><div class="line" id="LC57">			<span class="p">}</span></div><div class="line" id="LC58"><br/></div><div class="line" id="LC59">			<span class="nx">self</span><span class="p">.</span><span class="nx">models</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">orgmodels</span><span class="p">;</span></div><div class="line" id="LC60"><br/></div><div class="line" id="LC61">			<span class="k">if</span> <span class="p">(</span><span class="nx">sort</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC62">				<span class="nx">self</span><span class="p">.</span><span class="nx">models</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_sort</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">models</span><span class="p">,</span> <span class="nx">sort</span><span class="p">);</span></div><div class="line" id="LC63">			<span class="p">}</span></div><div class="line" id="LC64"><br/></div><div class="line" id="LC65">			<span class="nx">self</span><span class="p">.</span><span class="nx">reset</span><span class="p">(</span></div><div class="line" id="LC66">				<span class="nx">self</span><span class="p">.</span><span class="nx">models</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span><span class="nx">stop</span><span class="p">)</span></div><div class="line" id="LC67">			<span class="p">);</span></div><div class="line" id="LC68">		<span class="p">},</span></div><div class="line" id="LC69"><br/></div><div class="line" id="LC70">		<span class="nx">_sort</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">models</span><span class="p">,</span> <span class="nx">sort</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC71">			<span class="nx">models</span> <span class="o">=</span> <span class="nx">models</span><span class="p">.</span><span class="nx">sort</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC72">				<span class="kd">var</span> <span class="nx">a</span> <span class="o">=</span> <span class="nx">a</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">sort</span><span class="p">),</span></div><div class="line" id="LC73">					<span class="nx">b</span> <span class="o">=</span> <span class="nx">b</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">sort</span><span class="p">);</span></div><div class="line" id="LC74"><br/></div><div class="line" id="LC75">				<span class="k">if</span> <span class="p">(</span><span class="nx">direction</span> <span class="o">===</span> <span class="s1">'desc'</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC76">					<span class="k">if</span> <span class="p">(</span><span class="nx">a</span> <span class="o">&gt;</span> <span class="nx">b</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC77">						<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC78">					<span class="p">}</span></div><div class="line" id="LC79"><br/></div><div class="line" id="LC80">					<span class="k">if</span> <span class="p">(</span><span class="nx">a</span> <span class="o">&lt;</span> <span class="nx">b</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC81">						<span class="k">return</span> <span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC82">					<span class="p">}</span></div><div class="line" id="LC83">				<span class="p">}</span></div><div class="line" id="LC84">				<span class="k">else</span> <span class="p">{</span></div><div class="line" id="LC85">					<span class="k">if</span> <span class="p">(</span><span class="nx">a</span> <span class="o">&lt;</span> <span class="nx">b</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC86">						<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC87">					<span class="p">}</span></div><div class="line" id="LC88"><br/></div><div class="line" id="LC89">					<span class="k">if</span> <span class="p">(</span><span class="nx">a</span> <span class="o">&gt;</span> <span class="nx">b</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC90">						<span class="k">return</span> <span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC91">					<span class="p">}</span></div><div class="line" id="LC92">				<span class="p">}</span></div><div class="line" id="LC93"><br/></div><div class="line" id="LC94">				<span class="k">return</span> <span class="mi">0</span><span class="p">;</span></div><div class="line" id="LC95">			<span class="p">});</span></div><div class="line" id="LC96"><br/></div><div class="line" id="LC97">			<span class="k">return</span> <span class="nx">models</span><span class="p">;</span></div><div class="line" id="LC98">		<span class="p">},</span></div><div class="line" id="LC99"><br/></div><div class="line" id="LC100">		<span class="nx">info</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC101">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">,</span></div><div class="line" id="LC102">				<span class="nx">info</span> <span class="o">=</span> <span class="p">{},</span></div><div class="line" id="LC103">				<span class="nx">totalRecords</span> <span class="o">=</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">orgmodels</span><span class="p">)</span> <span class="o">?</span> <span class="nx">self</span><span class="p">.</span><span class="nx">orgmodels</span><span class="p">.</span><span class="nx">length</span> <span class="o">:</span> <span class="nx">self</span><span class="p">.</span><span class="nx">length</span><span class="p">,</span></div><div class="line" id="LC104">				<span class="nx">totalPages</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">ceil</span><span class="p">(</span><span class="nx">totalRecords</span><span class="o">/</span><span class="nx">self</span><span class="p">.</span><span class="nx">perPage</span><span class="p">);</span></div><div class="line" id="LC105"><br/></div><div class="line" id="LC106">			<span class="nx">info</span> <span class="o">=</span> <span class="p">{</span></div><div class="line" id="LC107">				<span class="nx">totalRecords</span>  <span class="o">:</span> <span class="nx">totalRecords</span><span class="p">,</span></div><div class="line" id="LC108">				<span class="nx">page</span>          <span class="o">:</span> <span class="nx">self</span><span class="p">.</span><span class="nx">page</span><span class="p">,</span></div><div class="line" id="LC109">				<span class="nx">perPage</span>       <span class="o">:</span> <span class="nx">self</span><span class="p">.</span><span class="nx">perPage</span><span class="p">,</span></div><div class="line" id="LC110">				<span class="nx">totalPages</span>    <span class="o">:</span> <span class="nx">totalPages</span><span class="p">,</span></div><div class="line" id="LC111">				<span class="nx">lastPage</span>      <span class="o">:</span> <span class="nx">totalPages</span><span class="p">,</span></div><div class="line" id="LC112">				<span class="nx">lastPagem1</span>    <span class="o">:</span> <span class="nx">totalPages</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span></div><div class="line" id="LC113">				<span class="nx">previous</span>      <span class="o">:</span> <span class="kc">false</span><span class="p">,</span></div><div class="line" id="LC114">				<span class="nx">next</span>          <span class="o">:</span> <span class="kc">false</span><span class="p">,</span></div><div class="line" id="LC115">				<span class="nx">page_set</span>      <span class="o">:</span> <span class="p">[],</span></div><div class="line" id="LC116">				<span class="nx">startRecord</span>   <span class="o">:</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="nx">self</span><span class="p">.</span><span class="nx">perPage</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span></div><div class="line" id="LC117">				<span class="nx">endRecord</span>     <span class="o">:</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">min</span><span class="p">(</span><span class="nx">totalRecords</span><span class="p">,</span> <span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">*</span> <span class="nx">self</span><span class="p">.</span><span class="nx">perPage</span><span class="p">)</span></div><div class="line" id="LC118">			<span class="p">};</span></div><div class="line" id="LC119"><br/></div><div class="line" id="LC120">			<span class="k">if</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC121">				<span class="nx">info</span><span class="p">.</span><span class="nx">prev</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC122">			<span class="p">}</span></div><div class="line" id="LC123"><br/></div><div class="line" id="LC124">			<span class="k">if</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">&lt;</span> <span class="nx">info</span><span class="p">.</span><span class="nx">totalPages</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC125">				<span class="nx">info</span><span class="p">.</span><span class="nx">next</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">page</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC126">			<span class="p">}</span></div><div class="line" id="LC127"><br/></div><div class="line" id="LC128">			<span class="nx">info</span><span class="p">.</span><span class="nx">pageSet</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">setPagination</span><span class="p">(</span><span class="nx">info</span><span class="p">);</span></div><div class="line" id="LC129"><br/></div><div class="line" id="LC130">			<span class="nx">self</span><span class="p">.</span><span class="nx">information</span> <span class="o">=</span> <span class="nx">info</span><span class="p">;</span></div><div class="line" id="LC131">			<span class="k">return</span> <span class="nx">info</span><span class="p">;</span></div><div class="line" id="LC132">		<span class="p">},</span></div><div class="line" id="LC133"><br/></div><div class="line" id="LC134">		<span class="nx">setPagination</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">info</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC135">			<span class="kd">var</span> <span class="nx">pages</span> <span class="o">=</span> <span class="p">[];</span></div><div class="line" id="LC136">			<span class="c1">// How many adjacent pages should be shown on each side?</span></div><div class="line" id="LC137">			<span class="kd">var</span> <span class="nx">ADJACENT</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span></div><div class="line" id="LC138">			<span class="kd">var</span> <span class="nx">ADJACENTx2</span> <span class="o">=</span> <span class="nx">ADJACENT</span><span class="o">*</span><span class="mi">2</span><span class="p">;</span></div><div class="line" id="LC139">			<span class="kd">var</span> <span class="nx">LASTPAGE</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">ceil</span><span class="p">(</span><span class="nx">info</span><span class="p">.</span><span class="nx">totalRecords</span><span class="o">/</span><span class="nx">info</span><span class="p">.</span><span class="nx">perPage</span><span class="p">);</span></div><div class="line" id="LC140">			<span class="kd">var</span> <span class="nx">LPM1</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC141"><br/></div><div class="line" id="LC142">			<span class="k">if</span> <span class="p">(</span><span class="nx">LASTPAGE</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC143">				<span class="c1">//not enough pages to bother breaking it up</span></div><div class="line" id="LC144">				<span class="k">if</span> <span class="p">(</span><span class="nx">LASTPAGE</span> <span class="o">&lt;</span> <span class="p">(</span><span class="mi">7</span> <span class="o">+</span> <span class="nx">ADJACENTx2</span><span class="p">))</span> <span class="p">{</span></div><div class="line" id="LC145">					<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="nx">l</span><span class="o">=</span><span class="nx">LASTPAGE</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;=</span> <span class="nx">l</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC146">						<span class="nx">pages</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span></div><div class="line" id="LC147">					<span class="p">}</span></div><div class="line" id="LC148">				<span class="p">}</span></div><div class="line" id="LC149">				<span class="c1">// enough pages to hide some</span></div><div class="line" id="LC150">				<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">LASTPAGE</span> <span class="o">&gt;</span> <span class="p">(</span><span class="mi">5</span> <span class="o">+</span> <span class="nx">ADJACENTx2</span><span class="p">))</span> <span class="p">{</span></div><div class="line" id="LC151"><br/></div><div class="line" id="LC152">					<span class="c1">//close to beginning; only hide later pages</span></div><div class="line" id="LC153">					<span class="k">if</span> <span class="p">(</span><span class="nx">info</span><span class="p">.</span><span class="nx">page</span> <span class="o">&lt;</span> <span class="p">(</span><span class="mi">1</span> <span class="o">+</span> <span class="nx">ADJACENTx2</span><span class="p">))</span> <span class="p">{</span></div><div class="line" id="LC154">						<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="nx">l</span><span class="o">=</span><span class="mi">4</span><span class="o">+</span><span class="nx">ADJACENTx2</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">l</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC155">							<span class="nx">pages</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>				</div><div class="line" id="LC156">						<span class="p">}</span></div><div class="line" id="LC157">					<span class="p">}</span></div><div class="line" id="LC158"><br/></div><div class="line" id="LC159">					<span class="c1">//in middle; hide some front and some back</span></div><div class="line" id="LC160">					<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="nx">LASTPAGE</span> <span class="o">-</span> <span class="nx">ADJACENTx2</span> <span class="o">&gt;</span> <span class="nx">info</span><span class="p">.</span><span class="nx">page</span> <span class="o">&amp;&amp;</span> <span class="nx">info</span><span class="p">.</span><span class="nx">page</span> <span class="o">&gt;</span> <span class="nx">ADJACENTx2</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC161">						<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">info</span><span class="p">.</span><span class="nx">page</span> <span class="o">-</span> <span class="nx">ADJACENT</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;=</span> <span class="nx">info</span><span class="p">.</span><span class="nx">page</span> <span class="o">+</span> <span class="nx">ADJACENT</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC162">							<span class="nx">pages</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>				</div><div class="line" id="LC163">						<span class="p">}</span>	</div><div class="line" id="LC164">					<span class="p">}</span></div><div class="line" id="LC165">					<span class="c1">//close to end; only hide early pages</span></div><div class="line" id="LC166">					<span class="k">else</span><span class="p">{</span></div><div class="line" id="LC167">						<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="nx">LASTPAGE</span> <span class="o">-</span> <span class="p">(</span><span class="mi">2</span> <span class="o">+</span> <span class="nx">ADJACENTx2</span><span class="p">);</span> <span class="nx">i</span> <span class="o">&lt;=</span> <span class="nx">LASTPAGE</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC168">							<span class="nx">pages</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>					</div><div class="line" id="LC169">						<span class="p">}</span></div><div class="line" id="LC170">					<span class="p">}</span></div><div class="line" id="LC171">				<span class="p">}</span></div><div class="line" id="LC172">			<span class="p">}</span></div><div class="line" id="LC173"><br/></div><div class="line" id="LC174">			<span class="k">return</span> <span class="nx">pages</span><span class="p">;</span></div><div class="line" id="LC175">		<span class="p">}</span></div><div class="line" id="LC176">	<span class="p">};</span></div><div class="line" id="LC177"><br/></div><div class="line" id="LC178"><span class="p">})(</span><span class="nx">App</span><span class="p">.</span><span class="nx">mixins</span><span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1531733/fe3a976eb9556e661f4c8f08db922c9ea536cc50/mixins_pagination.js" style="float: right;">view raw</a>
            <a href="https://gist.github.com/1531733#file_mixins_pagination.js" style="float: right; margin-right: 10px; color: #666;">mixins_pagination.js</a>
            <a href="https://gist.github.com/1531733">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Most of the code is pretty self-explanatory, so I won’t dig into every line.  There are some methods you will see in the code, <em>setSort</em> and <em>_sort</em>, that are actually not in use for this discussion but will follow up on them in another post.</p>
<p>The first four methods are the ones that get triggered to start the ball rolling on the pagination.  Each of them call the <em>pager</em> method.</p>
<p>The page method makes a backup copy of the models the first pass through.  Resets models with said backup.  Ignore the sort for this post.  And lastly we pass in the start and stop points into the <a href="http://www.w3schools.com/jsref/jsref_slice_array.asp" target="_blank">Array slice</a> method, which we in turn pass to the Backbone.js reset method.  This will trigger a reset event and any view that is watching it will execute.</p>
<p>The last two methods to concern yourself with is the <em>info</em> and <em>setPagination</em> methods.  The info method does some base variable set up that will be used in views that need that info, our pagination view for-instance.  The <em>setPagination</em> method is called by <em>info</em> and at this point I must add two things.  The first is that I more or less borrowed the code from a PHP pagination script and can’t find it again, otherwise I’d give credit.  The second is that the purpose of <em>setPagination</em> is to allow for custom pagination structure and I was not clear I how I should make this more straight forward.  Any suggestions would be great.</p>
<p>So, what does <em>setPagination</em> do?  Basically it returns an array of what pages you want in your pagination — this will become a bit clearer what you see the pagination view below/in action, but let me try to explain.  In the code that is there, if we are on page 8 of our recordset, the pages that show will look something like this: 5 6 7 8 9 10 11.   But you are not limited to that structure.  In the project I will be merging this into, it will have a structure like, assuming I am on page 8 again: 1-5 6 7 8 9 10 11-15.</p>
<p>Hopefully that is clear.</p>
<p>Next two up are the pagination view and template/index page themselves.  The final structure will look something like: <em> “<span style="text-decoration: underline;">First</span> <span style="text-decoration: underline;">Previous</span> <span style="text-decoration: underline;">5</span> <span style="text-decoration: underline;">6</span> <span style="text-decoration: underline;">7</span> 8 <span style="text-decoration: underline;">9</span> <span style="text-decoration: underline;">10</span> <span style="text-decoration: underline;">11</span> <span style="text-decoration: underline;">Next</span> <span style="text-decoration: underline;">Last</span> Show <span style="text-decoration: underline;">20</span> | <span style="text-decoration: underline;">50</span> | <span style="text-decoration: underline;">100</span> 141 – 160 of 28091 shown”</em>.  Again, everything should be pretty self-explanatory, each method is named to do what it is supposed to do.</p>
<div class="gist" id="gist-1531733">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class="line" id="LC1"><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">views</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC2">	<span class="nx">views</span><span class="p">.</span><span class="nx">Pagination</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">View</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span></div><div class="line" id="LC3"><br/></div><div class="line" id="LC4">		<span class="nx">events</span> <span class="o">:</span> <span class="p">{</span></div><div class="line" id="LC5">			<span class="s1">'click a.first'</span>        <span class="o">:</span> <span class="s1">'gotoFirst'</span><span class="p">,</span></div><div class="line" id="LC6">			<span class="s1">'click a.prev'</span>         <span class="o">:</span> <span class="s1">'gotoPrev'</span><span class="p">,</span></div><div class="line" id="LC7">			<span class="s1">'click a.next'</span>         <span class="o">:</span> <span class="s1">'gotoNext'</span><span class="p">,</span></div><div class="line" id="LC8">			<span class="s1">'click a.last'</span>         <span class="o">:</span> <span class="s1">'gotoLast'</span><span class="p">,</span></div><div class="line" id="LC9">			<span class="s1">'click a.page'</span>         <span class="o">:</span> <span class="s1">'gotoPage'</span><span class="p">,</span></div><div class="line" id="LC10">			<span class="s1">'click .howmany a'</span>     <span class="o">:</span> <span class="s1">'changeCount'</span></div><div class="line" id="LC11">		<span class="p">},</span></div><div class="line" id="LC12"><br/></div><div class="line" id="LC13">		<span class="nx">tagName</span> <span class="o">:</span> <span class="s1">'aside'</span><span class="p">,</span></div><div class="line" id="LC14">		<span class="nx">initialize</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC15">			<span class="nx">_</span><span class="p">.</span><span class="nx">bindAll</span> <span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="s1">'render'</span><span class="p">);</span></div><div class="line" id="LC16">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC17"><br/></div><div class="line" id="LC18">			<span class="nx">self</span><span class="p">.</span><span class="nx">tmpl</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">template</span><span class="p">(</span><span class="nx">$</span><span class="p">(</span><span class="s1">'#tmpPagination'</span><span class="p">).</span><span class="nx">html</span><span class="p">());</span></div><div class="line" id="LC19">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span><span class="s1">'reset'</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">render</span><span class="p">);</span></div><div class="line" id="LC20">			<span class="nx">$</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">el</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="s1">'body'</span><span class="p">);</span></div><div class="line" id="LC21">		<span class="p">},</span></div><div class="line" id="LC22">		<span class="nx">render</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC23">            <span class="kd">var</span> <span class="nx">self</span><span class="p">;</span></div><div class="line" id="LC24">            <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC25"><br/></div><div class="line" id="LC26">			<span class="kd">var</span> <span class="nx">html</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">tmpl</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">info</span><span class="p">());</span></div><div class="line" id="LC27">			<span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">).</span><span class="nx">html</span><span class="p">(</span><span class="nx">html</span><span class="p">);</span></div><div class="line" id="LC28">		<span class="p">},</span></div><div class="line" id="LC29"><br/></div><div class="line" id="LC30">		<span class="nx">gotoFirst</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC31">			<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span></div><div class="line" id="LC32"><br/></div><div class="line" id="LC33">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC34"><br/></div><div class="line" id="LC35">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">goTo</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span></div><div class="line" id="LC36">		<span class="p">},</span></div><div class="line" id="LC37"><br/></div><div class="line" id="LC38">		<span class="nx">gotoPrev</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC39">			<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span></div><div class="line" id="LC40"><br/></div><div class="line" id="LC41">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC42"><br/></div><div class="line" id="LC43">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">previousPage</span><span class="p">();</span></div><div class="line" id="LC44">		<span class="p">},</span></div><div class="line" id="LC45"><br/></div><div class="line" id="LC46">		<span class="nx">gotoNext</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC47">			<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span></div><div class="line" id="LC48"><br/></div><div class="line" id="LC49">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC50"><br/></div><div class="line" id="LC51">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">nextPage</span><span class="p">();</span></div><div class="line" id="LC52">		<span class="p">},</span></div><div class="line" id="LC53"><br/></div><div class="line" id="LC54">		<span class="nx">gotoLast</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC55">			<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span></div><div class="line" id="LC56"><br/></div><div class="line" id="LC57">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC58"><br/></div><div class="line" id="LC59">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">goTo</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">information</span><span class="p">.</span><span class="nx">lastPage</span><span class="p">);</span></div><div class="line" id="LC60">		<span class="p">},</span></div><div class="line" id="LC61"><br/></div><div class="line" id="LC62">		<span class="nx">gotoPage</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC63">			<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span></div><div class="line" id="LC64"><br/></div><div class="line" id="LC65">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC66">			<span class="kd">var</span> <span class="nx">page</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">target</span><span class="p">).</span><span class="nx">text</span><span class="p">();</span></div><div class="line" id="LC67"><br/></div><div class="line" id="LC68">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">goTo</span><span class="p">(</span><span class="nx">page</span><span class="p">);</span></div><div class="line" id="LC69">		<span class="p">},</span></div><div class="line" id="LC70"><br/></div><div class="line" id="LC71">		<span class="nx">changeCount</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC72">			<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span></div><div class="line" id="LC73"><br/></div><div class="line" id="LC74">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC75">			<span class="kd">var</span> <span class="nx">per</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">target</span><span class="p">).</span><span class="nx">text</span><span class="p">();</span></div><div class="line" id="LC76"><br/></div><div class="line" id="LC77">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">howManyPer</span><span class="p">(</span><span class="nx">per</span><span class="p">);</span></div><div class="line" id="LC78">		<span class="p">}</span></div><div class="line" id="LC79">	<span class="p">});</span></div><div class="line" id="LC80"><span class="p">})(</span><span class="nx">App</span><span class="p">.</span><span class="nx">views</span><span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1531733/71b6c55b8d149e20f17be0e1f9d8f7d444ab3807/views_pagination.js" style="float: right;">view raw</a>
            <a href="https://gist.github.com/1531733#file_views_pagination.js" style="float: right; margin-right: 10px; color: #666;">views_pagination.js</a>
            <a href="https://gist.github.com/1531733">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>I am using underscore.js’ <em>template</em> function.  Only real thing to note is the <em>_.each</em> loop.  This is where the “pages”, e.g. “<em>5 6 7 8 9 10 11</em>“, will get parsed out.</p>
<div class="gist" id="gist-1531733">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class="line" id="LC1"><span class="cp">&lt;!DOCTYPE HTML&gt;</span></div><div class="line" id="LC2"><span class="nt">&lt;html</span> <span class="na">lang=</span><span class="s">"en-US"</span><span class="nt">&gt;</span></div><div class="line" id="LC3">	<span class="nt">&lt;head&gt;</span></div><div class="line" id="LC4">		<span class="nt">&lt;meta</span> <span class="na">charset=</span><span class="s">"UTF-8"</span><span class="nt">&gt;</span></div><div class="line" id="LC5">		<span class="nt">&lt;title&gt;&lt;/title&gt;</span></div><div class="line" id="LC6">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"jquery-1.7.1.min.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC7">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"underscore.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC8">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"json2.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC9">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"backbone.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC10">		<span class="nt">&lt;script </span><span class="na">type=</span><span class="s">"text/javascript"</span><span class="nt">&gt;</span></div><div class="line" id="LC11">			<span class="kd">var</span> <span class="nx">App</span> <span class="o">=</span> <span class="p">{</span></div><div class="line" id="LC12">				<span class="nx">collections</span> <span class="o">:</span> <span class="p">{},</span></div><div class="line" id="LC13">				<span class="nx">models</span> <span class="o">:</span> <span class="p">{},</span></div><div class="line" id="LC14">				<span class="nx">views</span> <span class="o">:</span> <span class="p">{},</span></div><div class="line" id="LC15">				<span class="nx">mixins</span> <span class="o">:</span> <span class="p">{},</span></div><div class="line" id="LC16">				<span class="nx">init</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC17">					<span class="kd">var</span> <span class="nx">collection</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">App</span><span class="p">.</span><span class="nx">collections</span><span class="p">.</span><span class="nx">Tags</span><span class="p">();</span></div><div class="line" id="LC18">					<span class="nx">App</span><span class="p">.</span><span class="nx">views</span><span class="p">.</span><span class="nx">tags</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">App</span><span class="p">.</span><span class="nx">views</span><span class="p">.</span><span class="nx">Tags</span><span class="p">({</span><span class="nx">collection</span><span class="o">:</span><span class="nx">collection</span><span class="p">});</span></div><div class="line" id="LC19">					<span class="k">new</span> <span class="nx">App</span><span class="p">.</span><span class="nx">views</span><span class="p">.</span><span class="nx">Pagination</span><span class="p">({</span><span class="nx">collection</span><span class="o">:</span><span class="nx">collection</span><span class="p">});</span></div><div class="line" id="LC20">				<span class="p">}</span></div><div class="line" id="LC21">			<span class="p">};</span></div><div class="line" id="LC22">		<span class="nt">&lt;/script&gt;</span></div><div class="line" id="LC23">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"assets/app/mixins/pagination.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC24">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"assets/app/models/tag.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC25">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"assets/app/collections/tags.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC26">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"assets/app/views/tags.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC27">		<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">"assets/app/views/pagination.js"</span><span class="nt">&gt;&lt;/script&gt;</span></div><div class="line" id="LC28">		<span class="nt">&lt;script </span><span class="na">type=</span><span class="s">"text/javascript"</span><span class="nt">&gt;</span></div><div class="line" id="LC29">			<span class="nx">$</span><span class="p">(</span><span class="nx">App</span><span class="p">.</span><span class="nx">init</span><span class="p">);</span></div><div class="line" id="LC30">		<span class="nt">&lt;/script&gt;</span></div><div class="line" id="LC31">	<span class="nt">&lt;/head&gt;</span></div><div class="line" id="LC32">	<span class="nt">&lt;body&gt;</span></div><div class="line" id="LC33"><br/></div><div class="line" id="LC34">		<span class="nt">&lt;script </span><span class="na">type=</span><span class="s">"text/html"</span> <span class="na">id=</span><span class="s">"tmpPagination"</span><span class="nt">&gt;</span></div><div class="line" id="LC35">			<span class="o">&lt;</span><span class="nx">span</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"cell last pages"</span><span class="o">&gt;</span></div><div class="line" id="LC36">				<span class="o">&lt;%</span> <span class="k">if</span> <span class="p">(</span><span class="nx">page</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> <span class="o">%&gt;</span></div><div class="line" id="LC37">					<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"#"</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"first"</span><span class="o">&gt;</span><span class="nx">First</span><span class="o">&lt;</span><span class="err">/a&gt;</span></div><div class="line" id="LC38">					<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"#"</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"prev"</span><span class="o">&gt;</span><span class="nx">Previous</span><span class="o">&lt;</span><span class="err">/a&gt;</span></div><div class="line" id="LC39">				<span class="o">&lt;%</span> <span class="p">}</span> <span class="o">%&gt;</span></div><div class="line" id="LC40">				<span class="o">&lt;%</span> <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="p">(</span><span class="nx">pageSet</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">p</span><span class="p">)</span> <span class="p">{</span> <span class="o">%&gt;</span></div><div class="line" id="LC41">					<span class="o">&lt;%</span> <span class="k">if</span> <span class="p">(</span><span class="nx">page</span> <span class="o">==</span> <span class="nx">p</span><span class="p">)</span> <span class="p">{</span> <span class="o">%&gt;</span></div><div class="line" id="LC42">						<span class="o">&lt;</span><span class="nx">span</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"page selected"</span><span class="o">&gt;&lt;%=</span> <span class="nx">p</span> <span class="o">%&gt;&lt;</span><span class="err">/span&gt;</span></div><div class="line" id="LC43">					<span class="o">&lt;%</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="o">%&gt;</span></div><div class="line" id="LC44">						<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"#"</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"page"</span><span class="o">&gt;&lt;%=</span> <span class="nx">p</span> <span class="o">%&gt;&lt;</span><span class="err">/a&gt;</span></div><div class="line" id="LC45">					<span class="o">&lt;%</span> <span class="p">}</span> <span class="o">%&gt;</span></div><div class="line" id="LC46">				<span class="o">&lt;%</span> <span class="p">});</span> <span class="o">%&gt;</span></div><div class="line" id="LC47">				<span class="o">&lt;%</span> <span class="k">if</span> <span class="p">(</span><span class="nx">lastPage</span> <span class="o">!=</span> <span class="nx">page</span><span class="p">)</span> <span class="p">{</span> <span class="o">%&gt;</span></div><div class="line" id="LC48">					<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"#"</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"next"</span><span class="o">&gt;</span><span class="nx">Next</span><span class="o">&lt;</span><span class="err">/a&gt;</span></div><div class="line" id="LC49">					<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"#"</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"last"</span><span class="o">&gt;</span><span class="nx">Last</span><span class="o">&lt;</span><span class="err">/a&gt;</span></div><div class="line" id="LC50">				<span class="o">&lt;%</span> <span class="p">}</span> <span class="o">%&gt;</span></div><div class="line" id="LC51">			<span class="o">&lt;</span><span class="err">/span&gt;</span></div><div class="line" id="LC52"><br/></div><div class="line" id="LC53">			<span class="o">&lt;</span><span class="nx">span</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"cell howmany"</span><span class="o">&gt;</span></div><div class="line" id="LC54">				<span class="nx">Show</span></div><div class="line" id="LC55">				<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"#"</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"selected"</span><span class="o">&gt;</span><span class="mi">20</span><span class="o">&lt;</span><span class="err">/a&gt;</span></div><div class="line" id="LC56">				<span class="o">|</span></div><div class="line" id="LC57">				<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"#"</span> <span class="kr">class</span><span class="o">=</span><span class="s2">""</span><span class="o">&gt;</span><span class="mi">50</span><span class="o">&lt;</span><span class="err">/a&gt;</span></div><div class="line" id="LC58">				<span class="o">|</span></div><div class="line" id="LC59">				<span class="o">&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"#"</span> <span class="kr">class</span><span class="o">=</span><span class="s2">""</span><span class="o">&gt;</span><span class="mi">100</span><span class="o">&lt;</span><span class="err">/a&gt;</span></div><div class="line" id="LC60">			<span class="o">&lt;</span><span class="err">/span&gt;</span></div><div class="line" id="LC61"><br/></div><div class="line" id="LC62">			<span class="o">&lt;</span><span class="nx">span</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"cell first records"</span><span class="o">&gt;</span></div><div class="line" id="LC63">				<span class="o">&lt;</span><span class="nx">span</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"current"</span><span class="o">&gt;&lt;%=</span> <span class="nx">startRecord</span> <span class="o">%&gt;&lt;</span><span class="err">/span&gt;</span></div><div class="line" id="LC64">				<span class="o">-</span></div><div class="line" id="LC65">				<span class="o">&lt;</span><span class="nx">span</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"perpage"</span><span class="o">&gt;&lt;%=</span> <span class="nx">endRecord</span> <span class="o">%&gt;&lt;</span><span class="err">/span&gt;</span></div><div class="line" id="LC66">				<span class="nx">of</span></div><div class="line" id="LC67">				<span class="o">&lt;</span><span class="nx">span</span> <span class="kr">class</span><span class="o">=</span><span class="s2">"total"</span><span class="o">&gt;&lt;%=</span> <span class="nx">totalRecords</span> <span class="o">%&gt;&lt;</span><span class="err">/span&gt;</span></div><div class="line" id="LC68">							<span class="nx">shown</span></div><div class="line" id="LC69">			<span class="o">&lt;</span><span class="err">/span&gt;</span></div><div class="line" id="LC70">		<span class="nt">&lt;/script&gt;</span></div><div class="line" id="LC71">	<span class="nt">&lt;/body&gt;</span></div><div class="line" id="LC72"><span class="nt">&lt;/html&gt;</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1531733/755cf71860c40d97d73c619e03ebd9e8ae9a8d02/index.html" style="float: right;">view raw</a>
            <a href="https://gist.github.com/1531733#file_index.html" style="float: right; margin-right: 10px; color: #666;">index.html</a>
            <a href="https://gist.github.com/1531733">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>This last bit is the view that helps parses out the tags.</p>
<div class="gist" id="gist-1531733">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class="line" id="LC1"><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">views</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC2">	<span class="nx">views</span><span class="p">.</span><span class="nx">Tags</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">View</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span></div><div class="line" id="LC3">		<span class="nx">tagName</span> <span class="o">:</span> <span class="s1">'ul'</span><span class="p">,</span></div><div class="line" id="LC4">		<span class="nx">initialize</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC5">			<span class="nx">_</span><span class="p">.</span><span class="nx">bindAll</span> <span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="s1">'render'</span><span class="p">,</span> <span class="s1">'addAll'</span><span class="p">,</span> <span class="s1">'addOne'</span><span class="p">);</span></div><div class="line" id="LC6">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC7">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">fetch</span><span class="p">({</span></div><div class="line" id="LC8">				<span class="nx">success</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC9">					<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">pager</span><span class="p">();</span></div><div class="line" id="LC10">				<span class="p">},</span></div><div class="line" id="LC11">				<span class="nx">silent</span><span class="o">:</span><span class="kc">true</span></div><div class="line" id="LC12">			<span class="p">});</span></div><div class="line" id="LC13">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span><span class="s1">'reset'</span><span class="p">,</span> <span class="nx">self</span><span class="p">.</span><span class="nx">addAll</span><span class="p">);</span></div><div class="line" id="LC14">			<span class="nx">$</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">el</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="s1">'body'</span><span class="p">);</span></div><div class="line" id="LC15">		<span class="p">},</span></div><div class="line" id="LC16">		<span class="nx">addAll</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC17">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC18"><br/></div><div class="line" id="LC19">			<span class="nx">$</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">el</span><span class="p">).</span><span class="nx">empty</span><span class="p">();</span></div><div class="line" id="LC20">			<span class="nx">self</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">each</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">addOne</span><span class="p">);</span></div><div class="line" id="LC21">		<span class="p">},</span></div><div class="line" id="LC22"><br/></div><div class="line" id="LC23">		<span class="nx">addOne</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">model</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="LC24">			<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class="line" id="LC25"><br/></div><div class="line" id="LC26">			<span class="kd">var</span> <span class="nx">view</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Tag</span><span class="p">({</span><span class="nx">model</span><span class="o">:</span><span class="nx">model</span><span class="p">});</span></div><div class="line" id="LC27">			<span class="nx">view</span><span class="p">.</span><span class="nx">render</span><span class="p">();</span></div><div class="line" id="LC28">			<span class="nx">$</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">el</span><span class="p">).</span><span class="nx">append</span><span class="p">(</span><span class="nx">view</span><span class="p">.</span><span class="nx">el</span><span class="p">);</span></div><div class="line" id="LC29">		<span class="p">}</span></div><div class="line" id="LC30">	<span class="p">});</span></div><div class="line" id="LC31"><br/></div><div class="line" id="LC32">	<span class="kd">var</span> <span class="nx">Tag</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">View</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span></div><div class="line" id="LC33">		<span class="nx">tagName</span> <span class="o">:</span> <span class="s1">'li'</span><span class="p">,</span></div><div class="line" id="LC34">		<span class="nx">render</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span></div><div class="line" id="LC35">			<span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">el</span><span class="p">).</span><span class="nx">html</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">model</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'name'</span><span class="p">));</span></div><div class="line" id="LC36">		<span class="p">}</span></div><div class="line" id="LC37">	<span class="p">});</span></div><div class="line" id="LC38"><span class="p">})(</span><span class="nx">App</span><span class="p">.</span><span class="nx">views</span><span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1531733/ebc3d5c45b84af3dfd2958f6780e9860f64499f7/views_tags.js" style="float: right;">view raw</a>
            <a href="https://gist.github.com/1531733#file_views_tags.js" style="float: right; margin-right: 10px; color: #666;">views_tags.js</a>
            <a href="https://gist.github.com/1531733">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<h2>Closing</h2>
<p>Like anything else, there are a hundred ways to do things and this is just one.  My example goes off the assumption that all the data is available but I am sure it can be re-written to only fetch a certain number of records from the server on an as needed basis.</p>
<p>What would you do differently?  Did you see anything wrong with my implementation?</p></div>
    </content>
    <updated>2011-12-30T18:28:43Z</updated>
    <category term="Javascript"/>
    <category term="backbone.js"/>
    <category term="pagination"/>
    <category term="underscore.js"/>
    <author>
      <name>Benjamin Sterling</name>
    </author>
    <source>
      <id>http://benjaminsterling.com</id>
      <link href="http://benjaminsterling.com/category/jquery/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://benjaminsterling.com" rel="alternate" type="text/html"/>
      <subtitle>Ok, you did not judge the book by it's cover, great.  Now, read the whole thing before passing judgment.</subtitle>
      <title>The Book and the Cover</title>
      <updated>2011-12-30T19:14:08Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://ejohn.org/?p=5792</id>
    <link href="http://ejohn.org/blog/javascript-as-a-first-language/" rel="alternate" type="text/html"/>
    <title>JavaScript as a First Language</title>
    <summary>At Khan Academy we've been investigating teaching Computer Science to students in some new and interesting ways. The most interesting aspect of which is that we're likely going to be teaching them JavaScript as their first language. We're in a very unique position as we're primarily aiming to teach students who've been through our previous [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>At <a href="http://www.khanacademy.org/">Khan Academy</a> we've been investigating teaching Computer Science to students in some new and interesting ways. The most interesting aspect of which is that we're likely going to be teaching them JavaScript as their first language.</p>
<p>We're in a very unique position as we're primarily aiming to teach students who've been through our previous <a href="http://www.khanacademy.org/exercisedashboard?k">math and science-centric curriculum</a>. Because of this we can create some rather compelling exercises and projects that never would've been feasible otherwise.</p>
<p>The prospect of teaching the JavaScript language as a first language is actually really exciting. Teaching prototypal inheritance to experienced classical-inheritance-using developers is normally rather frustrating (and results in many libraries springing up attempting to replicate the classical style of inheritance in JavaScript, which is a whole realm of weirdness in-and-of itself). Teaching prototypal inheritance to someone who has never seen any form of inheritance before will decidedly be an easier task. The same goes for learning functional programming. JavaScript is a great language for experiencing functional programming and can be a major focus of our curriculum as a result.</p>
<p>As we've begun to look at the prospect of JavaScript-as-a-first-language a number of obvious warts stick out (as is obvious to anyone who has worked with JavaScript for any duration). To make sure that general warts don't crop up we will be using some form of linting (either JSLint or JSHint or similar) in the code editor to give the users contextual information on what's happening with their code and why they should be writing their code in a certain way.</p>
<p>We want to go beyond basic syntax tweaks though and find ways of using the language that'll result in an easier learning experience. In particular there are two changes which will likely result in a much simpler on-ramp to learning.</p>
<p><strong>Note:</strong> These particular recommendations really only make sense if you're teaching JavaScript to someone who has never seen the language before and is really only programming with a set of specific, well-coded, libraries. Obviously more will have to be taught in order bring the students up to the level of "see any random piece of cross-browser JavaScript code and understand what it does."</p>
<h3>Type Coercion</h3>
<p>Type coercion is just a complete mess, as many many others have pointed out and as what Douglas Crockford typically teaches, as in <a href="http://www.amazon.com/gp/product/0596517742/ref=as_li_ss_tl?ie=UTF8&amp;tag=jspro-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596517742">JavaScript: The Good Parts</a>.</p>
<p>It might make sense to discuss it far later in the education cycle... like after learning about prototypes, functional programming, and closures. Basically after everything that's actually important.</p>
<div class="syntax_hilite">
<div id="js-3">
<div><span style="color: #000066;">name</span> === <span style="color: #3366CC;">"John"</span></div>
</div>
</div>
<p>The first change that I'm recommending is that the students will only ever see, and use, <code>===</code> (and <code>!==</code>). While using '<code>==</code>' does have the advantage of being syntactically shorter there is so much type coercion baggage attached to it as to make it an exercise in futility to try and teach early on in the learning of programming.</p>
<p>The one exception that might be worthwhile to teach later on is the case in which you wish to see if a variable contains a null or undefined value. This can be done easily with a simple <code>someVar == null</code> check and is likely the one useful case of <code>==</code>. (Another noted exception is the browser bug in IE where <code>===</code> checks against Window objects will always return false, but it's unlikely that we'll cover such specific browser issues in our curriculum.)</p>
<p><strong>Falsy Values</strong></p>
<p>For the same reasons that <code>==</code> can be messy, so can falsy values. Enforcing strict boolean checks would result in less edge cases but would certainly result in longer code. Perhaps education of falsy values can be limited to booleans, null, and undefined with number and string falsy values left for a later exercise. </p>
<h3>Function Declarations</h3>
<p>Perhaps the most interesting change that we can make is a rather subtle one, but it's eschewing normal function declarations for creating anonymous functions and assigning them to a variable.</p>
<div class="syntax_hilite">
<div id="js-4">
<div><span style="color: #009900; font-style: italic;">// Don't do this:</span><br/>
<span style="color: #003366; font-weight: bold;">function</span> getData<span style="color: #008800; font-weight: bold;">(</span><span style="color: #008800; font-weight: bold;">)</span> <span style="color: #008800; font-weight: bold;">{</span> <span style="color: #008800; font-weight: bold;">}</span>
<p><span style="color: #009900; font-style: italic;">// Do this instead:</span><br/>
<span style="color: #003366; font-weight: bold;">var</span> getData = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #008800; font-weight: bold;">(</span><span style="color: #008800; font-weight: bold;">)</span> <span style="color: #008800; font-weight: bold;">{</span> <span style="color: #008800; font-weight: bold;">}</span>;</p></div>
</div>
</div>
<p>There are a number of good habits that are instilled when you use this particular technique.</p>
<ul>
<li>Makes it easier to understand "functions as an object". I've found that when you show new developers a function being assigned to a variable it suddenly becomes much more obvious that a function is actually an object and can be manipulated as such (and that a function can be passed as an argument to another function). Thus students are advanced along the path towards a better understanding of functional programming.</li>
<li>It enforces good semicolon habits. Traditional function declaration is the only situation in which semicolons aren't needed (save for conditional statements and loops, naturally) and it makes it much more obvious when they're required all the time.</li>
<li>Doesn't have much of the baggage <a href="https://developer.mozilla.org/en/JavaScript/Reference/Scope_Cheatsheet">traditionally associated with functions and scope</a>.</li>
</ul>
<h3>Block Scope</h3>
<p>This is the remaining area that'll certainly be a challenge for any introductory student to understand and yet I don't see a particularly good solution here. The issue of variables declared within for loops hoisting up is more than enough to make most developers heads spin. I'll have to see if we can't come up with some intuitive ways of explaining how variable declaration works (and combining it with vigilant lint enforcement) rather than having a purely technical solution.</p>
<p>(While <code>(function(){ ... })();</code> is a solution I'm skeptical that we'll be able to teach that early-enough on as to make it worthwhile.)</p>
<h2>JavaScript as a  First Language</h2>
<p>It should be noted that while we're starting with JavaScript as a first language - largely due to its ubiquity, desirability in the larger workforce, lack of prior installation requirements, and ability to create something that's easy to share with friends - we're not going to be myopic and only focus on JavaScript. There are so many things that can be learned from other languages, not to mention entire skillsets that aren't terribly relevant to in-browser JavaScript, that it behooves us to try and bring as much of them into our curriculum as possible.</p>
<p>I talk a little bit more about our choice to use JavaScript and some of the browsers that we'll want to support in our development in the <a href="http://www.youtube.com/watch?v=k0Fi8EnSInE">following video</a>:</p>
<p/>
<p>By all accounts I want to try and avoid any features that would cause cross-browser weirdness to spring up. As a result we'll be making extensive use of libraries (for drawing to a canvas or manipulating the DOM) and using only JavaScript language features that work consistently in the browsers that we end up supporting.</p>
<img height="1" src="http://feeds.feedburner.com/~r/JohnResig/~4/Y4CgYR4Z4bc" width="1"/></div>
    </content>
    <updated>2011-12-21T19:04:28Z</updated>
    <category term="Blog"/>
    <author>
      <name>John Resig</name>
    </author>
    <source>
      <id>http://ejohn.org</id>
      <logo>http://ejohn.org/files/jeresig-wordpress-sm.jpg</logo>
      <link href="http://ejohn.org" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/JohnResig" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Blog, Projects, and Links</subtitle>
      <title>John Resig</title>
      <updated>2012-09-17T21:14:04Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>http://www.learningjquery.com/?p=1324</id>
    <link href="http://feedproxy.google.com/~r/LearningJquery/~3/Sxy8quoqN1g/using-jquerys-pushstack-for-reusable-dom-traversing-methods" rel="alternate" type="text/html"/>
    <title>Using jQuery’s .pushStack() for reusable DOM traversing methods</title>
    <summary>The .pushStack() method has been in jQuery since before version 1.0, but it hasn't received a whole lot of attention outside of core developers and plugin authors. While its usefulness may not be immediately apparent, it can come in really handy in some situations, so I'd like to take a quick look at what it [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The <code>.pushStack()</code> method has been in jQuery since before version 1.0, but it hasn't received a whole lot of attention outside of core developers and plugin authors. While its usefulness may not be immediately apparent, it can come in really handy in some situations, so I'd like to take a quick look at what it does, how it works, and how we can use it.</p>

  <h4>pushStack Basics </h4>
  <p>At its most basic level, the <code>.pushStack()</code> method accepts an array of DOM elements and "pushes" it onto a "stack" so that later calls to methods like <code>.end()</code> and <code>.andSelf()</code> behave correctly. (Side note: As of jQuery 1.4.2, you can pass in a jQuery object instead of an array, but that isn't documented and jQuery itself always uses an array, so that's what we'll stick to here.)</p>
  <p>Internally, jQuery uses <code>.pushStack()</code> to keep track of the previous jQuery collections as you chain <a href="http://api.jquery.com/category/traversing/">traversing methods</a> such as <code>.parents()</code> and <code>.filter()</code>. This lets us traverse through the DOM, do some stuff, "back up" to previous collections within the same chain using <code>.end()</code>, and then do something else. Here is a somewhat contrived example:</p>
<span id="more-1324"/>
<div class="igBar"><span id="ljavascript-8"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-8">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// select some divs</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">$<span style="color: #009900;">(</span><span style="color: #3366CC;">'div.container'</span><span style="color: #009900;">)</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  <span style="color: #006600; font-style: italic;">// find some spans inside those divs and add a class to them</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  .<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=find"><span>find</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'span'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=addClass"><span>addClass</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'baby'</span><span style="color: #009900;">)</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// pop those spans off the "stack",</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// returning to the previous collection (div.container)</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=end"><span>end</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  <span style="color: #006600; font-style: italic;">// add a class to the parent of each div.container</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  .<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=parent"><span>parent</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=addClass"><span>addClass</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'daddy'</span><span style="color: #009900;">)</span>;</div></li>
</ol></div>
</div></div><br/>

<p>Because <code>.find()</code> returns the result of a <code>.pushStack()</code> call to keep track of the previous collection (as does <code>.parent()</code>), we can use <code>.end()</code> in the above example to return to the container divs.</p>

<h4>Using pushStack for Fun and Profit</h4>
<p>So, this is great for jQuery, but what can <code>.pushStack()</code> do for me and my code? Well, it can help me write specialized DOM traversal plugins that act just like jQuery's own traversal methods. In other words, I can stop chaining the same sets of traversal methods together and instead write a reusable function that still works with with <code>.end()</code> and all that. For example, let's say I often have a need to find an element's grandparent. While I could write <code>$('#myElement').parent().parent()</code> every time, it might be nice to just be able to write <code>$('#myElement').grandparent()</code> instead. A naïve way to write a grandparent plugin would look like this (changing the method name to "grandpa" for this example): </p>

<div class="igBar"><span id="ljavascript-9"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-9">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// NOT recommended!</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span>$<span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">grandpa</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=parents"><span>parents</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=parents"><span>parents</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  <span style="color: #009900;">}</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span>jQuery<span style="color: #009900;">)</span>;</div></li>
</ol></div>
</div></div><br/>

<p>The problem here is that <em>two</em> new jQuery object instances are added to the stack. So, let's see what happens when we use it:  </p>
<div class="igBar"><span id="ljavascript-10"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-10">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// The DOM looks like this:</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// &lt;div class="grandpa"&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//  &lt;div class="pa"&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//    &lt;div class="child son"&gt;&lt;/div&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//  &lt;/div&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// &lt;/div&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">var</span> elem <span style="color: #339933;">=</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'div.son'</span><span style="color: #009900;">)</span>.<span style="color: #660066;">grandpa</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=end"><span>end</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">$<span style="color: #009900;">(</span><span style="color: #3366CC;">'div.son'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=text"><span>text</span></a><span style="color: #009900;">(</span> elem.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'class'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
</ol></div>
</div></div><br/>

<div class="grandpa">
 <div class="pa">
   <div class="child son"/>
 </div>
</div>

<p>Without seeing the plugin, we would expect to see <em>"child son"</em> inserted into <code>&lt;div class="son"&gt;</code>, but <em>"pa"</em> is inserted instead. Each <code>.parent()</code> call in the plugin adds to the stack, so using <code>.end()</code> only pops the second one off.</p>
<p>If we use <code>.pushStack()</code> instead, however, we can achieve the expected behavior:</p>

<div class="igBar"><span id="ljavascript-11"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-11">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span>$<span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">grandma</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #003366; font-weight: bold;">var</span> els <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=parent"><span>parent</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=parent"><span>parent</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=pushStack"><span>pushStack</span></a><span style="color: #009900;">(</span> els.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=get"><span>get</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  <span style="color: #009900;">}</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span>jQuery<span style="color: #009900;">)</span>;</div></li>
</ol></div>
</div></div><br/>

<p>Within a plugin function, one that is a method of<code> $.fn</code>, the <code>this</code> keyword refers to the jQuery object; therefore, the <code>els</code> variable refers to a jQuery object, as well. To convert it to an array, we use jQuery's <code>.get()</code> method, and we pass that array to <code>.pushStack()</code>. Let's see if <code>.grandma()</code> works any better than <code>.grandpa()</code>.</p>
<div class="igBar"><span id="ljavascript-12"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-12">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// The DOM looks like this:</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// &lt;div class="grandma"&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//  &lt;div class="ma"&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//    &lt;div class="child daughter"&gt;&lt;/div&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//  &lt;/div&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// &lt;/div&gt;</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">var</span> elem <span style="color: #339933;">=</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'div.daughter'</span><span style="color: #009900;">)</span>.<span style="color: #660066;">grandma</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=end"><span>end</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">$<span style="color: #009900;">(</span><span style="color: #3366CC;">'div.daughter'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=text"><span>text</span></a><span style="color: #009900;">(</span> elem.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'class'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
</ol></div>
</div></div><br/>

<div class="grandma">
 <div class="ma">
   <div class="child daughter"/>
 </div>
</div>

<p>Here, "child daughter" is inserted, which means that <code>.end()</code> works as expected, changing the jQuery collection from the result of <code>.grandma()</code> to the result of <code>$('div.daughter')</code>. So, we've just successfully written a DOM traversal plugin, albeit a very simple one.</p>

<h4>The Simplest DOM Traversal Methods </h4>
<p>If the plugin only uses one DOM traversal method, then <code>.pushStack()</code> isn't really necessary. The <a href="http://www.elijahmanor.com/2011/07/filterbydata-jquery-plugin.html">HTML5 data filter plugin</a> written by Elijah Manor illustrates this point nicely: </p>

<div class="igBar"><span id="ljavascript-13"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-13">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span>$<span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">filterByData</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span> type<span style="color: #339933;">,</span> value <span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=filter"><span>filter</span></a><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">      <span style="color: #000066; font-weight: bold;">return</span> value <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #339933;">?</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">        $<span style="color: #009900;">(</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span> type <span style="color: #009900;">)</span> <span style="color: #339933;">===</span> value <span style="color: #339933;">:</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">        $<span style="color: #009900;">(</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span> type <span style="color: #009900;">)</span> <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #009900;">}</span><span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  <span style="color: #009900;">}</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span>jQuery<span style="color: #009900;">)</span>;</div></li>
</ol></div>
</div></div><br/>

<p>Only one new jQuery collection is added to the stack, via <code>.filter()</code>, so using <code>.end()</code> simply pops that one off, and our job is done. </p>

<h4>Filtering grandparents</h4>
<p>For the sake of completeness, it would be nice for this DOM traversal plugin to allow optional "filtering" of the parent and grandparent elements. After all, jQuery's <code>.parent()</code>  and <code>.parents()</code> allow filtering. For example, if I were to write <code>$('div.child').parent('.daddy')</code>, the jQuery collection would only contain an element if <code>div.child</code> had a parent element and if that parent had a class of "daddy."</p>
<p>There are plenty of reasonable ways one could include the filters, but for my purposes I'm going to have a <code>.grandparent()</code> method <em>optionally</em> accept two arguments. If only one argument is provided, it will filter the <em>grandparent</em> element only; if two are provided, the first will filter the parent and the second will filter the grandparent. Here is the full plugin plugin: </p>

<div class="igBar"><span id="ljavascript-14"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-14">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span>$<span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">grandparent</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span> parentFilter<span style="color: #339933;">,</span> grandFilter <span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">(</span> <span style="color: #339933;">!</span>grandFilter <span style="color: #009900;">)</span> <span style="color: #009900;">{</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">      grandFilter <span style="color: #339933;">=</span> parentFilter;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">      parentFilter <span style="color: #339933;">=</span> undefined;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #009900;">}</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #003366; font-weight: bold;">var</span> els <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=parent"><span>parent</span></a><span style="color: #009900;">(</span> parentFilter <span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=parent"><span>parent</span></a><span style="color: #009900;">(</span> grandFilter <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=pushStack"><span>pushStack</span></a><span style="color: #009900;">(</span> els.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=get"><span>get</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">  <span style="color: #009900;">}</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #009900;">(</span>jQuery<span style="color: #009900;">)</span>;</div></li>
</ol></div>
</div></div><br/>

<p>Finally, we have a nice <code>.grandparent()</code> plugin that adheres to the contract set by other jQuery DOM traversal methods—one that works with both filters and the <code>.end()</code> method. Here is what it could look like in use.</p>

<img height="1" src="http://feeds.feedburner.com/~r/LearningJquery/~4/Sxy8quoqN1g" width="1"/></div>
    </content>
    <updated>2011-12-20T18:51:07Z</updated>
    <category term="Advanced"/>
    <category term="DOM Traversing"/>
    <category term="Intermediate"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.learningjquery.com/2011/12/using-jquerys-pushstack-for-reusable-dom-traversing-methods</feedburner:origlink>
    <author>
      <name>Karl Swedberg</name>
    </author>
    <source>
      <id>http://www.learningjquery.com</id>
      <link href="http://www.learningjquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/LearningJquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Tips, techniques, and tutorials for the jQuery JavaScript library</subtitle>
      <title>Learning jQuery</title>
      <updated>2012-09-12T07:14:20Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1870</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/PQDpMN8tQek/" rel="alternate" type="text/html"/>
    <title>Plugins Site Update: The Old Is New Again</title>
    <summary>We’ve gotten a lot of feedback since last week’s announcement about the plugins site’s unfortunate tumble into oblivion, and I’d like to address a few of the most important concerns that have surfaced since. “Could you make the old backup available for posterity?” Yes. We can — and have. Over the weekend, we restored the [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>We’ve gotten a lot of feedback since last week’s announcement about the plugins site’s unfortunate tumble into oblivion, and I’d like to address a few of the most important concerns that have surfaced since.</p>
<h2>“Could you make the old backup available for posterity?”</h2>
<p>Yes. We can — and have. Over the weekend, we restored the most recent backup we had, and the original site is now living at <a href="http://archive.plugins.jquery.com">archive.plugins.jquery.com</a>; you should be able to browse through everything that’s there to your heart’s content. We also applied the most recent user information we had, so if you had an account on the old site at any point in the last year, it should still work. However, the site is closed to new user registrations. If you <strong>really</strong> need a new account, please <a href="http://twitter.com/ajpiano">get in touch with me personally</a> and I can get that straightened out for you. We’ve also set up a redirect, so that if you should encounter any links to plugins.jquery.com in your browsing, you’ll (hopefully) end up at the corresponding page in the archive.</p>
<h2>Just get a backup from the Wayback Machine!</h2>
<p>While the Internet Archive has cached versions of content that was updated more recently than last October, we just don’t have the people-power to re-create the lost posts manually in the new archive site. If you have an account, you can feel free to add “new” or old plugins, or update existing ones, should you desire to. However, this archive will not be indexed by search engines.</p>
<h2>If you hate CMS-es so much, what’s with WordPress?</h2>
<p>We’re in the middle of a network-wide redesign, and WordPress offers us a valuable set of tools when it comes to theming, searching, and serving a group of sites. Our new motto, however, is <strong>pull requests, not passwords</strong>; we’re implementing theming, documentation, plugins, and more in such a way that contribution will not actually require an account on our CMS at all. As I outlined in the initial post, the plugin submission process will only involve adding a post-receive hook to your repository. In the event of a similar catastrophe, we’re made sure we’ll be able to replay the entire plugin contribution history and get the site back up to speed right away. Our goal is to leverage the WordPress features we find useful without it serving as a barrier to entry or as the canonical warehouse of content. If you are of the mind that WordPress is always a bad idea, no matter what, no matter how, you’re certainly entitled to that opinion, but at this point, it’s not particularly beneficial to the conversation.</p>
<h2>Git(Hub) is hard</h2>
<p>The new plugins site will serve as an index of plugins, with a simple “download” button right on each plugin’s page. You will <strong>not</strong> have to just browse around GitHub looking for jQuery plugins. If you don’t know git and only ever want to download jQuery plugins, you don’t have to learn it. However, if you want to submit plugins, you’ll have to be using some sort of source control that you can at least mirror in git. This is by design: it can be really easy to build a jQuery plugin, but that doesn’t mean it’s necessarily fit for public consumption. Requiring the use of source control and <code>package.json</code> are passive mechanisms that will help ensure that plugins which proliferate are authored by developers who have met a reasonable baseline (and aren’t selling batteries). We’re only targeting GitHub support for launch, but we’d <a href="https://github.com/jquery/plugins.jquery.com/issues/4">like to add support for other services as well</a>. We are actively avoiding the use of GitHub-specific features that would force us to limit the site to GithHub users permanently.</p>
<h2>It’s A Conspiracy!</h2>
<p>Some have called into question the veracity of my account, and that’s understandable, given the timing and circumstances. But believe me, the last thing I wanted to do after spending a day manually pruning spam from the directory was turn around and cause a gigantic headache for thousands of people, including myself and my colleagues. I hope the re-launching of the last backup at least partially allays these concerns. Additionally, we’re starting off with GitHub simply because it has a very broad user base already, and it has been incredibly positive for us since we shifted to it for development of jQuery Core, UI, and Mobile.</p>
<p>Thanks again for bearing with us during this transition.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/PQDpMN8tQek" width="1"/></div>
    </content>
    <updated>2011-12-13T16:44:45Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/12/13/plugins-site-update-the-old-is-new-again/</feedburner:origlink>
    <author>
      <name>Adam J. Sontag</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-24T02:14:32Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>http://bassistance.de/?p=924</id>
    <link href="http://bassistance.de/2011/12/09/vector-math-basics-to-animate-a-bouncing-ball-in-javascript/" rel="alternate" type="text/html"/>
    <title>Vector math basics to animate a bouncing ball in JavaScript</title>
    <summary>Vector math is pretty much essential when you want to do any kind of physics simulation, be it as simple as a bouncing ball. While my goal originally was to implement a flocking simulation (like birds flying close to each other, but not too close), the lack of math skills led me to build a [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Vector math is pretty much essential when you want to do any kind of physics simulation, be it as simple as a bouncing ball. While my goal originally was to implement a flocking simulation (like birds flying close to each other, but not too close), the lack of math skills led me to build a bouncing ball simulation first.</p>
<p>At the same time, I wanted to see what Khan Academy is all about. Turns out they have lessons on vector math, but there’s very little on vectors specifically. There are two lessons on vector basics, where <a href="http://www.khanacademy.org/video/linear-algebra--vector-examples?playlist=Linear+Algebra">this second one is a lot more practical</a>. There are also two exercises, <a href="http://www.khanacademy.org/exercise/adding_vectors">one for addition</a> of vectors, <a href="http://www.khanacademy.org/exercise/scaling_vectors">one for scaling</a>. Both are pretty easy and you should be done within a minute if you watched the video.</p>
<p>With that knowledge under your belt, let’s look at some practical application, the aforementioned bouncing ball. To start, <a href="http://jzaefferer.github.com/flocking/bouncing.html">take a look at the demo</a> and play around with it, there are some instructions at the top.</p>
<p>You can find the source code for that demo on GitHub, <a href="https://github.com/jzaefferer/flocking/blob/master/bouncing.js">here is the main file for the bouncing balls demo</a>. I’m not going to discuss the Point and Vector classes that this uses, <a href="https://github.com/jzaefferer/flocking/blob/master/math.js">though you should take a look</a>. They just implement adding and scaling of vectors, and calculating a vector based on two points. Let’s walk through the code:</p>
<pre><code>var GRAVITY = new Vector(0, 9.81);
var FRICTION = 0.85;
var world = {
	x1: 0,
	y1: 0
};
$(window).resize(function() {
	world.x2 = $(window).width();
	world.y2 = $(window).height();
}).trigger("resize");</code></pre>
<p>This defines two constants, GRAVITY and FRICTION, which we’ll use later to affect simulated objects. GRAVITY is a vector pointing downwards, where the second component represents the 9.81 meters per second, while the first component is zero. FRICTION is used in collisions later, and completely arbitrary.</p>
<p>The world object is also used in collision detection, and represents the dimensions of our 2d world. It starts at 0/0 in the left top corner, and ends in the right bottom corner. We bind a resize handler on window to update this calculation, that way collisions happen within the browser window, no matter how big it currently is.</p>
<p>Next up is the definition of our Ball class:</p>
<pre><code>function Ball() {
	this.position = new Point(200, 200);
	this.output = $("&lt;div&gt;").addClass("dot").appendTo("body");
	this.velocity = new Vector(-5, 0);
}
Ball.prototype = {
	remove: function() {
		this.output.remove();
	},
	move: function() {
		// apply gravity
		this.velocity = this.velocity.add(GRAVITY.scale(0.1));

		// collision detection against world
		if (this.position.y &gt; world.y2) {
			this.velocity.x2 = -this.velocity.x2 * FRICTION;
			this.position.y = world.y2;
		} else if (this.position.y &lt; world.y1) {
			this.velocity.x2 = -this.velocity.x2 * FRICTION;
			this.position.y = world.y1;
		}
		if (this.position.x &lt; world.x1) {
			this.velocity.x1 = -this.velocity.x1 * FRICTION;
			this.position.x = world.x1;
		} else {
			if (this.position.x &gt; world.x2) {
				this.velocity.x1 = -this.velocity.x1 * FRICTION;
				this.position.x = world.x2;
			}
		}

		// update position
		this.position.x += this.velocity.x1;
		this.position.y += this.velocity.x2;

		// render
		this.output.css({
			left: this.position.x,
			top: this.position.y
		});
	}
};</code></pre>
<p>This defines a Ball constructor, which initializes a new Ball at some arbitrary position, with some velocity to the left. It also creates a simple DOM element that we use for output.</p>
<p>The prototype of Ball has two methods. The <code>remove</code> method just removes the DOM element, which we use for cleanup. The <code>move</code> method is much more intersting: It gets called for each ‘tick’ of our animation loop, so we use it to update the current velocity, look for collisions, update the current position and render the result. Step by step:</p>
<pre><code>this.velocity = this.velocity.add(GRAVITY.scale(0.1));</code></pre>
<p>This adds GRAVITY to the balls velocity. While GRAVITY has a real world value, we need to adapt it to our pixel-based dimension. Doing this in every tick causes the ball to accelerate downwards, or when moving upwards, to deccelarate. With this alone our ball would start falling, but never stop. That’s where the next block comes in, the collision detection:</p>
<pre><code>if (this.position.y &gt; world.y2) {
	this.velocity.x2 = -this.velocity.x2 * FRICTION;
	this.position.y = world.y2;
} else if (this.position.y &lt; world.y1) {
	this.velocity.x2 = -this.velocity.x2 * FRICTION;
	this.position.y = world.y1;
}
if (this.position.x &lt; world.x1) {
	this.velocity.x1 = -this.velocity.x1 * FRICTION;
	this.position.x = world.x1;
} else {
	if (this.position.x &gt; world.x2) {
		this.velocity.x1 = -this.velocity.x1 * FRICTION;
		this.position.x = world.x2;
	}
}</code></pre>
<p>Here we compare the current position of our ball to the dimensions of the <code>world</code>. For each direction, there’s a check if the call is beyond the limit, if so, it inverts the velocity for that direction, while applying <code>FRICTION</code>. This causes the ball to bounce back slightly slower then it was before, simulating very primitive friction. To avoid glitches, where the ball goes beyond the world dimensions and doesn’t come back, the position gets updated to move it back inside the defined limits.</p>
<p>Now that we’ve updated the velocity (and fixed the position in case of a collision), we can update the resulting position and output it:</p>
<pre><code>// update position
this.position.x += this.velocity.x1;
this.position.y += this.velocity.x2;

// render
this.output.css({
	left: this.position.x,
	top: this.position.y
});</code></pre>
<p>This adds the velocity components to the position of the ball, then uses inline styles to update the position in the DOM.</p>
<p>Next we’ll look at the setup and animation loop:</p>
<pre><code>var balls = [];
balls.push(new Ball());

// animation loop
setInterval(function() {
	balls.forEach(function(ball) {
		ball.move();
	});
}, 25);</code></pre>
<p>Here we create an array of balls and add one initial Ball. Then start an interval to at 25ms, which should give us about 40 frames per second (fps). To get more smooth 60fps, we’d have to go down to 16.5ms, which would also be even more CPU intensive then this becomes with lots of balls.</p>
<p>Inside the interval, we just loop through all balls and call the move method for each. In a proper game engine, this loop would separate the position updates from the rendering to ensure that, when frames get dropped, the game itself doesn’t slow down.</p>
<p>Up next, we’ve got the code to add new balls, with user controlled initial velocity:</p>
<pre><code>var start;
$(document).mousedown(function(event) {
	start = new Point(event.pageX, event.pageY);
}).mouseup(function(event) {
	var end = new Point(event.pageX, event.pageY);
	var ball = new Ball();
	ball.position = end;
	ball.velocity = start.relative(end).scale(0.2);
	ball.move();
	balls.push(ball);
});</code></pre>
<p>Here we bind <code>mousedown</code> and <code>mouseup</code> events, each time creating a Point object from the <code>pageX</code> and <code>pageY</code> event properties. In the <code>mouseup</code> handler, we then use the end point as the starting position for the new Ball object. Using Point’s <code>relative</code> method, we calculate a vector between those two points, scale it down and use it as the velocity for the new ball. That way, you can just click anywhere to add a new ball, or click, drag and let go to create one with intial velocity based on the drag. To get the ball animated along with the others, its added to the <code>balls</code> array.</p>
<p>With that we’re almost at the end. The last piece just clears all balls when pressing Escape:</p>
<pre><code>$(document).keyup(function(event) {
	if (event.keyCode === 27) {
		balls.forEach(function(ball) {
			ball.remove();
		});
		balls.splice(0, balls.length);
	}
});</code></pre>
<p>And that’s it! Thanks to <code>Vector</code>, we’ve got a pretty sane implementation, and a good starting point for further improvements. And there’s lots of potential:</p>
<ul>
<li>Better friction simulation: Currently balls keep bouncing pretty often, they don’t slow down as much as they should after loosing some height.</li>
<li>More collision detection: Detecting collisions with other balls, the mouse or other objects would make the whole thing a lot more interesting.</li>
<li>Better collision detection: Currently collision detection just happens against a fixed position, not the actual ball’s dimensions. Taking the (rounded) borders into account would make things quite a bit more complicated, but also more realistic.</li>
<li>More moving objects with other shapes: Currently there’s just pixels bouncing around, even though they’re rendering as balls. Adding square objects both animated and static could make things a lot more interesting.</li>
<li>3D: Moving from a 2D to a 3D simulation involves adding another component to both the Vecotor and Point class, and would add that third dimensions to each calculation, making especially the collision detection, already the most complex part, even more complex.</li>
</ul>
<p>With this, I’ll get back to working on the basics for my flocking simulation.</p></div>
    </content>
    <updated>2011-12-09T13:15:15Z</updated>
    <category term="Game Programming"/>
    <category term="jQuery"/>
    <author>
      <name>Jörn</name>
    </author>
    <source>
      <id>http://bassistance.de</id>
      <link href="http://bassistance.de/category/jquery/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://bassistance.de" rel="alternate" type="text/html"/>
      <subtitle>Jörn Zaefferer on Bass, Geeks and Rock'n'Roll</subtitle>
      <title>bassistance.de » jQuery</title>
      <updated>2012-09-18T03:14:10Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1844</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/4Rl5jFda4W4/" rel="alternate" type="text/html"/>
    <title>What Is Happening To The jQuery Plugins Site?</title>
    <summary>For about a week, instead of hosting several hundred jQuery plugins and several thousand advertisements for laptop batteries, our plugins repository has been serving up a pretty pathetic message about spam and an allusion to some “new submission process.” This happened very suddenly, and we’re sorry to everyone who’s been inconvenienced. Please allow me a few minutes to explain [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>For about a week, instead of hosting several hundred jQuery plugins and several thousand advertisements for laptop batteries, our plugins repository has been serving up a pretty pathetic message about spam and an allusion to some “new submission process.” This happened very suddenly, and we’re sorry to everyone who’s been inconvenienced. Please allow me a few minutes to explain what happened, where we’re headed, and how it impacts you. If you’re in a rush, here’s the <a href="http://feeds.feedburner.com/jquery/#pluginstldr">short version</a>.</p>
<h2>The Backstory</h2>
<p><a href="http://en.wikipedia.org/wiki/White_elephant"><img alt="A White Elephant" class="alignright size-full wp-image-1848" src="http://blog.jquery.com/wp-content/uploads/2011/12/white-elephant.png" style="float: right;" title="A White Elephant" width="200"/></a> Though the plugins site you’ve known <del>and loved</del> was a valuable tool when it was first set up, it gradually became something of a <a href="http://en.wikipedia.org/wiki/White_elephant">white elephant</a> for the project. While powerful distribution tools like <a href="http://github.com">GitHub</a> and <a href="http://npmjs.org/">npm</a> have come to the fore, we’ve been stuck in an aging, CMS-oriented paradigm that frustrated developers and consumers of plugins alike. Many people moved onto alternative sources for finding and vetting plugins. Furthermore, the sites’s original implementors and maintainers had since moved on from active involvement within the jQuery project. While the team faced a steady stream of complaints about usability and a general lack of features, the site itself faced a veritable barrage of (several flavors of) spam. There was your standard, keyword-rich SEO garbage, but there was also something slightly more insidious: the batch posting of under-documented, demo-free plugins with links to paid download sites by third parties trawling for affiliate cash. While this wasn’t explcitly disallowed, it led to a terrible, confusing experience for users and gave the site the distinct sense that all was not on the up and up.</p>
<h2>The Best Laid Plans…</h2>
<p>Sensitive to all these problems, the team began drawing up requirements for a complete overhaul. We knew we wanted to get out of the business of accepting uploads, serving downloads, and generally legislating the plugin “release” process on our own servers. With our official projects already on GitHub, we knew we wanted to leverage the many wheels they’d already invented for distribution, versioning, and facilitating open, collaborative development. Another requirement was to create a standard schema for authors to clearly delineate dependencies, like which version(s) of jQuery a plugin supports, as well as other plugins and CSS assets it requires to be functional. We also wanted to introduce some quality control, with both passive mechanisms like requiring GitHub and a manifest file for distribution, as well as active ones like user ratings. Finally, we wanted a clean slate; with stricter requirements for submission, there could be no mass import of all the old plugins. We made a lot of progress preparing specifications, but hampered by a lack of resources and a number of other projects, we never were able to get too deep into the implementation phase. After all, the old site “worked!”</p>
<h2>…Often Go Awry</h2>
<p><img alt="Throwing the baby out with the bathwater" class="alignright size-full wp-image-1849" src="http://blog.jquery.com/wp-content/uploads/2011/12/baby-with-bathwater-mid-size.gif" style="float: right;" title="Throwing the baby out with the bathwater" width="200"/></p>
<p>As the glut of spam grew worse and multiple reports started showing up on the jQuery Core bug tracker, I wanted to at least take some steps to wipe a bit of the spam and egg off our face. With newly provisioned access to the administrative tools on the site, I teamed up with the <a href="http://drupal.org/project/views_bulk_operations">Drupal Views Bulk Operations module</a> and set out to identify and delete spammers and their posts. Within a day or two, nearly 90% of the alleged “content” was gone from the site. I continued to monitor the situation over the ensuing days, and deleted spam as it came in. Unfortunately, I likely cast too wide of a net, and threw out several perfectly good babies with the bathwater. Even more unfortunately, I didn’t back up the database before I began this process. At this point, you can probably see where this story is headed. Later in the week, while I was attempting to delete four spam items, I was left completely horrified when the results of the operation reported that the remaining 10% — every single plugin remaining in the database — had been purged. All that remained was a year-old backup. Of course, I realize that this is a dreadful outcome, and I take full responsibility for it. If it helps, I am very receptive to hate mail and tweets reprimanding me for being irresponsible, unprofessional, or just stupid.</p>
<p>At this juncture, we were left with two choices.</p>
<ul>
<li>Keep on kicking the can down the road: Restore from the old backup, losing a lot of data anyway, and have authors go through the painstaking process of re-uploading their plugins, even though the site was slated to be deprecated entirely anyway.</li>
<li>Use this glaring mistake as the impetus to hunker down, cleave from the past, and finally implement the site we’ve talked about for so long.</li>
</ul>
<p>We’ve chosen the latter.</p>
<h2>Nuts And Bolts</h2>
<p>Over the past few days, we’ve started converting our plans into action, building out an infrastructure that’s backed by GitHub. There are two requirements for listing a plugin on the new site:<br/>
<img alt="Success Kid is helping out as well" class="size-medium wp-image-1850 alignright" src="http://blog.jquery.com/wp-content/uploads/2011/12/pluginsitebaby-300x300.png" style="float: right;" title="Success Kid is helping out as well" width="200"/></p>
<ul>
<li>A valid <a href="https://github.com/jquery/plugins.jquery.com/blob/master/docs/package.md">package.json</a> file<br/>
We’ve followed the lead of <a href="http://wiki.commonjs.org/wiki/Packages/1.0"> CommonJS </a> and <a href="https://github.com/isaacs/npm/blob/master/package.json">npm</a> and created a schema for specifying dependencies, delivery, and other metadata of jQuery plugins. While the format is largely similar to those other projects, we’ve had to make some minor tweaks to account for some plugin-specific details.</li>
<li>At least one versioned release<br/>
This means having <a href="http://learn.github.com/p/tagging.html">tagged</a> your release point(s) with a valid semantic version number (<a href="http://semver.org/">semver</a>) string.</li>
</ul>
<p>We’ve pared down the submission and maintenance process to a single, one-time step: adding a <a href="http://help.github.com/post-receive-hooks/">post-receive hook</a> to your plugin’s GitHub repository. Assuming your plugin meets the guidelines, a page will be created on the plugins site to present your usage and download information. We’ll keep track of new releases as you push them.</p>
<h2>In The Interim</h2>
<p>We recognize that the old site was still serving as an regular resource for a lot of people, especially newer jQuery users, who simply valued the existence of a central browsing location, despite its flaws. Though many experienced users had moved on to other sites, or relied on relationships with trusted authors and word of mouth, these can take time to develop. Until we’re able to launch the new system, we’re happy to direct you to several other directories and people who can help pick up the slack:</p>
<ul>
<li><a href="http://jquerylist.com">jQuery List</a></li>
<li><a href="http://jquerystyle.com">jQuery Style</a></li>
<li><a href="http://jquery.malsup.com/">Mike Alsup</a></li>
<li><a href="http://github.com/cowboy">Ben Alman</a></li>
<li><a href="http://pupunzi.com/#mb.components/components.html">Matteo Bicocchi</a></li>
<li><a href="http://bassistance.de/jquery-plugins/">Jörn Zaefferer</a></li>
</ul>
<p>If, in the process of searching these or any other directories, you are directed back to the current site at plugins.jquery.com, typically a quick search for the author’s name and the plugin name will yield an alternative site where it was hosted. In addition, <a href="http://dailyjs.com/2011/12/06/jquery-roundup/">DailyJS just did a useful roundup of alternatives</a> that goes into more detail.</p>
<h2>Next Steps For Plugin Authors</h2>
<p>If you’re a plugin developer who wants to make sure your plugins will be ready to go on day one (or even beforehand), you’ll want to make sure your plugins are up on GitHub, and then you’ll want to get started on creating your <a href="https://github.com/jquery/plugins.jquery.com/blob/master/docs/package.md">package.json </a> files and making sure your versions are appropriately tagged. If you aren’t already familiar with Git and GitHub, then this is probably a very good time for you to take the plunge and <a href="http://help.github.com/">get started</a>. If you prefer another SCM system, you can look into setting up a mirror to git from <a href="http://progit.org/book/ch8-1.html">svn</a> or <a href="http://hg-git.github.com/">hg</a>, or other project hosting sites, like <a href="http://bitbucket.org">bitbucket</a> or <a href="http://gitorious.org">gitorious</a>. If you don’t develop your plugins as open source, or you don’t use any source control at all, we will not be able to accomodate you at this time.</p>
<h2>How Can I Help?</h2>
<p>Though the site is still a work in progress, you can track progress and even set up your own local development right now at <a href="http://github.com/jquery/plugins.jquery.com/">github.com/jquery/plugins.jquery.com/</a>. We’re still working on getting a public staging environment together.</p>
<p>Though the site is essentially “powered by” GitHub, there are obviously a number of moving parts in play. The site will actually be served from inside of WordPress, which is populated with the contents of the indexed plugins using a node.js tool. There are still many kinks to be ironed out, so if that sounds like a stack you want to jump on, please join us over at <a href="http://github.com/jquery/plugins.jquery.com/">the repo</a>. We’ll be using GitHub Issues for all feature requests, bugs, and discussion.</p>
<p>While we’ve put a great deal of thought into putting together our <code>package.json</code> schema, it’s still a living document, and if you have questions or comments on why it is the way that it is, head on over to <a href="https://github.com/jquery/plugins.jquery.com/issues/2">this issue</a>.</p>
<h2>Errata</h2>
<p>In an ideal world, this certainly wouldn’t have happened exactly as it did. Sadly, it did. We hope you’ll accept our apologies for the many ways this transition might make your job harder, give you some extra work you weren’t expecting, or just plain leave a bad taste in your mouth. If you are able to forgive us, bear with us, and maybe even lend a hand, we’re confident we’ll be able to deliver the modern, useful plugins site the community deserves.</p>
<p><a name="pluginstldr"/></p>
<h2>TL;DR</h2>
<p>So that was a lot of words, here’s the takeaway.</p>
<ul>
<li>We’d been planning on replacing the original, spam-ridden plugin site for quite some time</li>
<li>In the process of deleting on the spam, all the plugins were deleted and we didn’t have a recent backup</li>
<li>Instead of burning cycles keeping the old site on life support, we decided to make a clean break and kick development on the new site into high gear.</li>
<li>The new site is powered by GitHub and a <a href="https://github.com/jquery/plugins.jquery.com/blob/master/docs/package.md">package manifest for plugins</a></li>
<li>Plugins from the old site were never going to be automatically imported into the new one.</li>
<li>The repo is at <a href="http://github.com/jquery/plugins.jquery.com">github.com/jquery/plugins.jquery.com</a></li>
<li>We are very sorry, but also very excited!</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/4Rl5jFda4W4" width="1"/></div>
    </content>
    <updated>2011-12-08T21:20:29Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/12/08/what-is-happening-to-the-jquery-plugins-site/</feedburner:origlink>
    <author>
      <name>Adam J. Sontag</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-06-22T11:14:22Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1835</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/4M1Umcxz83A/" rel="alternate" type="text/html"/>
    <title>jQuery Conference 2012: UK – Training Workshops Announced</title>
    <summary>We are very happy to announce two training workshops for this years United Kingdom conference. The trainings will be given by Doug Neiner, Ralph Whitbeck and Mike Hostetler of appendTo. The general admission tickets for the conference are now sold out but you can buy conference/training bundles and still attend the conference. appendTo will be [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>We are very happy to announce <a href="http://events.jquery.org/2012/uk/#workshop">two training workshops</a> for this years <a href="http://events.jquery.org/2012/uk/">United Kingdom conference</a>.  The trainings will be given by <a href="http://appendto.com/team/doug-neiner">Doug Neiner</a>, <a href="http://appendto.com/team/ralph-whitbeck">Ralph Whitbeck</a> and <a href="http://appendto.com/team/mike-hostetler">Mike Hostetler</a> of <a href="http://appendto">appendTo</a>. The general admission tickets for the conference are now sold out but you can buy conference/training bundles and still attend the conference. </p>
<p><a href="http://appendto.com"><img align="left" alt="appendTo" height="58" src="http://blog.jquery.com/wp-content/uploads/2011/11/appendTo-logo.png" title="appendTo" width="280"/></a></p>
<p>appendTo will be giving <em>Introduction to jQuery</em> and <em>jQuery Mobile</em> workshops.  The workshops will be held on Thursday, 9 February, 2012 at the Lady Margaret Hall in Oxford, UK.</p>
<h2>Introduction to jQuery</h2>
<p>jQuery has become the most popular JavaScript library for developers because of it’s easy to learn and write. This course takes students through the basics of jQuery focused front-end development. This material is meant to establish a core foundation for developers. With a solid basis of jQuery and JavaScript understanding a developer will feel confident that they can add richness to their web applications.</p>
<h3>jQuery Topics Covered*</h3>
<ul>
<li>Introduction</li>
<li>Find Something, Do Something</li>
<li>The jQuery Function</li>
<li>The jQuery Object</li>
<li>Events/Ajax/more…</li>
</ul>
<p><em>* Topics subject to change</em>
</p><p>Price for the Introduction to jQuery workshop is £320 + VAT which includes a conference pass, £160 + VAT for just the training.</p>
<h2>jQuery Mobile</h2>
<p>jQuery mobile has gained undeniable press as a possible great solution to mobile web development. With a progressive enhancement approach jQuery mobile aims to allow a mobile web experience for all, while rewarding those with mobile devices capable of a rich experience.</p>
<p>This training will cover a comprehensive review of the jQuery Mobile Framework, walking through all of its new features and functionalities available to build robust and cross-platform mobile sites. The entire API will covered along with examples of how to use each component to its fullest potential.</p>
<p>The training concludes with a walk through of the construction of a jQuery Mobile application from scratch, all the way through to compiling a native version of the application with PhoneGap.</p>
<h3>Topics Covered*</h3>
<ul>
<li>The state of the mobile web</li>
<li>jQuery Mobile Feature Overview</li>
<li>Building a jQuery Mobile application from scratch</li>
<li>Go native with jQuery Mobile + PhoneGap</li>
</ul>
<p><em>* Topics subject to change</em></p>
<p>Price for the jQuery Mobile workshop is £420 + VAT which includes a conference pass, £270 + VAT for just the training.</p>
<p>The training workshops will be held on 9 February, 2012 at the <a href="http://maps.google.com/maps?q=Lady+Margaret+Hall,+Benson+Place,+Oxford,+United+Kingdom&amp;hl=en&amp;ll=51.764326,-1.255067&amp;spn=0.008645,0.022681&amp;sll=37.0625,-95.677068&amp;sspn=45.063105,92.900391&amp;vpsrc=6&amp;hq=Lady+Margaret+Hall,+Benson+Place,+Oxford,+United+Kingdom&amp;t=m&amp;z=16">Lady Margaret Hall</a> and not at the Saïd Business School where the conference will be held.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/4M1Umcxz83A" width="1"/></div>
    </content>
    <updated>2011-11-29T15:56:52Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/29/jquery-conference-2012-uk-training-workshops-announced/</feedburner:origlink>
    <author>
      <name>Ralph Whitbeck</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-05-04T00:14:17Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1800</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/Km7cJPZ__NA/" rel="alternate" type="text/html"/>
    <title>Call for jQuery 1.8 Ideas</title>
    <summary>We’re ready for our next round of community input, this time for version 1.8! This is your chance to suggest things we can fix, add, change, or remove in jQuery to make it better. You can add a suggestion using this form; whenever possible provide links to a bug report, a page with a detailed [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>We’re ready for our next round of community input, this time for version 1.8! This is your chance to suggest things we can fix, add, change, or remove in jQuery to make it better. </p>
<p>You can add a suggestion using <a href="http://goo.gl/d1ebE">this form</a>; whenever possible provide links to a bug report, a page with a detailed description, or implementations that represent your idea. We’d like to have all your input by December 5 so we can read and discuss them before setting the 1.8 roadmap.</p>
<p>Many thanks for the suggestions left on our <a href="http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/">earlier blog post</a> about how we can improve jQuery by trimming it down. We’ve gone through those comments and have a few thoughts about how we can address some of them in future versions.</p>
<h3>Create a configurable download builder</h3>
<p>Several people wondered why we don’t have a way to build a file with just the parts of jQuery you need, since jQuery UI, for example, has that option. It’s not quite the same situation. You know if you are using, say UI Accordion because you call it directly. You often do not know if you <em>or some plugin you include on your page</em> is using $.fn.prepend() or $.fn.animate(). Whether you are using them may even depend on parameters you pass to plugins at runtime. </p>
<p>To keep jQuery development manageable and ensure that CDNs can offer a single file that everyone on the Internet can share and cache effectively, the team wants to stay with a single file as its primary offering. Creating a configurable download may improve file size marginally, but it also complicates documentation, plugin use, and debugging. That is a lot more work for both you and us.</p>
<p>We’re already beginning the efforts to improve modularity by eliminating unwanted dependencies inside jQuery; many of the deprecated features we announce will be directed towards removing those dependencies. By laying that groundwork, others who want to create their own smaller subsets of jQuery or modular versions should have a much easier job.</p>
<p>However, we believe we can do even better than that, and would like to offer automated ways for any user to create an optimally minimized file that includes both application code and just the needed parts of jQuery. In particular, we are working with the Google Closure Compiler team to see if we could use its <a href="http://code.google.com/closure/compiler/docs/api-tutorial3.html">ADVANCED_OPTIMIZATIONS</a> option. We’ll have more information on our progress as it develops.</p>
<h3>Wait until version 2.0 before removing things</h3>
<p>We’re sensitive to breaking all the existing jQuery code out there. That is why we are deprecating things as early as possible, so that people have plenty of time to change their code. Just because we deprecate something today, it does not necessarily mean we’ll remove it in the next version. We believe the list of things actually being removed in 1.8 are minor and unlikely to affect most users. </p>
<p>If our experiments with Closure Compiler pan out, we may even be able to leave in many deprecated features but they will be automatically removed if you don’t use them and build a custom application file that includes jQuery. That would be the best of both worlds.</p>
<h3>Remove IE 6, 7, and/or 8 support</h3>
<p>This topic comes up constantly, so let’s try to put it to bed once and for all.  People tend to greatly overestimate the amount of code in jQuery that is specifically related to IE. Most of the problems in IE 6 and IE 7 are also present in IE 8, so there is no real size or complexity benefit to dropping support for the first two as long as that last one still has appreciable desktop market share and must be supported. Nobody (including Microsoft itself) likes these Jurassic Park browsers, but stripping out support for them right now would break web sites for many users.</p>
<p>That said, we know that older-IE support is not required in some scenarios such as mobile browsers. We are looking into ways to put as much of that code as possible into a single clearly marked block so that it can be easily removed by someone who is willing to create their own custom jQuery version. It may also be possible to get Closure Compiler’s help with this issue as well. However, we are not sure that will even provide a significant space savings in gzipped file size, and it won’t offer a performance boost since those code paths aren’t taken in other browsers.</p>
<h3>Remove jQuery.browser</h3>
<p>We have documented for nearly two years that we intend to move jQuery.browser into a plugin, and several people suggested it in the comments as well. Browser sniffing is not a reliable way to look for features, we recommend something like <a href="http://www.modernizr.com/">Modernizr</a> instead. The regular expressions used for browser sniffing are large and don’t compress well; moving it to a plugin will ensure that only the people who use it must pay that size penalty.</p>
<h3>What about your ideas?</h3>
<p>Please do take this opportunity to give us your input. The team is looking forward to reviewing your suggestions. Oh, and don’t forget to try jQuery 1.7.1 soon!</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/Km7cJPZ__NA" width="1"/></div>
    </content>
    <updated>2011-11-22T18:28:08Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/22/call-for-jquery-1-8-ideas/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-04-05T02:14:20Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1792</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/KZSavnvHd0o/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7.1 Released</title>
    <summary>Here in the United States, we’re celebrating Thanksgiving this week. For those of you living elsewhere in the world, it’s a time when we install and test new versions of Javascript libraries while feasting on Mom’s homemade goodies. Kind of like a code sprint, but with better food. We invite everyone worldwide to join us [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Here in the United States, we’re celebrating Thanksgiving this week. For those of you living elsewhere in the world, it’s a time when we install and test new versions of Javascript libraries while feasting on Mom’s homemade goodies. Kind of like a code sprint, but with better food. We invite everyone worldwide to join us in these traditions.</p>
<p>To kick off the festivities, the jQuery Team is quite thankful to be releasing version 1.7.1! In this go-round we made Pilgrim’s progress on a cornucopia of bugs, listed below. We are serving up our delicious copies on the jQuery CDN, fresh and warm from the oven:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7.1.min.js">http://code.jquery.com/jquery-1.7.1.min.js</a></li>
<li><a href="http://code.jquery.com/jquery-1.7.1.js">http://code.jquery.com/jquery-1.7.1.js</a></li>
</ul>
<p>These latest files should also be up on the major CDNs shortly, but please be patient since this is a holiday week for them as well.</p>
<p>Please install and test this latest slice of jQuery with your code. We hope you’ll find it tasty. If we forgot to fry some turkey of a bug, we want to hear about it. Just put together a specific test case for the problems you’ve found (we love <a href="http://jsFiddle.net">jsFiddle.net</a> for that) and create a bug report at <a href="http://bugs.jquery.com">bugs.jquery.com</a>.</p>
<p>Also, please welcome new jQuery Core team member Mike Sherov! We’re thankful to have his help for all the great things we have planned for upcoming versions. Mike has a full-time job at <a href="http://devblog.snap-interactive.com/">SNAP Interactive</a> in New York City, but contributes to the project in his spare time. Please Be Like Mike and pitch in to help the project any way you can. It doesn’t have to be coding. We can always use help in answering questions on the forum or just reproducing and identifying the source of obscure bugs reported on the bug tracker. See our <a href="http://docs.jquery.com/Getting_Involved">Getting Involved</a> page for information.</p>
<p>We’ll be opening the call for 1.8 suggestions in just a day or two. Take a look at the 1.7.1 release and think about what kind of awesome sauce we can put on top of it for the next big one!</p>
<h2>jQuery 1.7.1 Change Log</h2>
<p>The change log of the 1.7.1 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10723">#10723</a>: jqXHR.always() returns a Promise instead of a jqXHR object</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10724">#10724</a>: $(document).text() always returns an empty string</li>
<li><a href="http://bugs.jquery.com/ticket/10773">#10773</a>: removeAttr is fragile for edge cases</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10630">#10630</a>: Fix focus-related test failures to resolve Swarm failures</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10616">#10616</a>: Type coersion not done for -1 in .eq</li>
<li><a href="http://bugs.jquery.com/ticket/10646">#10646</a>: Have jQuery.error throw instanceof Error object</li>
<li><a href="http://bugs.jquery.com/ticket/10682">#10682</a>: Creating DOM elements with $(‘ ‘) leaks memory and skips the fragment cache</li>
<li><a href="http://bugs.jquery.com/ticket/10687">#10687</a>: jQuery calls the AMD define() global function too early</li>
<li><a href="http://bugs.jquery.com/ticket/10690">#10690</a>: isNumeric</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10733">#10733</a>: remove uses of jQuery.each in css module in favor of a for loop</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10675">#10675</a>: Use internalKey shortcut instead of jQuery.expando</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10669">#10669</a>: .animate() no longer animates percentage(%) width</li>
<li><a href="http://bugs.jquery.com/ticket/10750">#10750</a>: A “null” in the data object can cause an error in stop</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10676">#10676</a>: wheelDelta not added to mousewheel event anymore</li>
<li><a href="http://bugs.jquery.com/ticket/10701">#10701</a>: Problems with submit forms using submit function</li>
<li><a href="http://bugs.jquery.com/ticket/10704">#10704</a>: special.handle method should fire under origType name</li>
<li><a href="http://bugs.jquery.com/ticket/10705">#10705</a>: off bug event name parser</li>
<li><a href="http://bugs.jquery.com/ticket/10712">#10712</a>: Triggering blur with live bind broken</li>
<li><a href="http://bugs.jquery.com/ticket/10717">#10717</a>: A triggered load bubbles up to window</li>
<li><a href="http://bugs.jquery.com/ticket/10791">#10791</a>: Delegated Events fail on SVG elements</li>
<li><a href="http://bugs.jquery.com/ticket/10794">#10794</a>: .triggerHandler should not .preventDefault()</li>
<li><a href="http://bugs.jquery.com/ticket/10798">#10798</a>: live(“submit”) and .submit() would cause unobtrusive ajax live to fire twice</li>
<li><a href="http://bugs.jquery.com/ticket/10844">#10844</a>: .delegate() on submit doesn’t work when form contains input with name “id”</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10177">#10177</a>: index of callback function in .wrap is always 0</li>
<li><a href="http://bugs.jquery.com/ticket/10667">#10667</a>: HTML5 Support in .wrapAll() does add a “:” to element</li>
<li><a href="http://bugs.jquery.com/ticket/10670">#10670</a>: rnoshimcache probably not constructed correctly</li>
<li><a href="http://bugs.jquery.com/ticket/10812">#10812</a>: passing empty object to .before() or .after() throws exception in IE7</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10691">#10691</a>: remove all occurrences of the “equals” and “same” function in the unit tests`</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10629">#10629</a>: IE is much too sensitive concerning the fake body. Explore cleaning up support.js to avoid any future crashes.</li>
<li><a href="http://bugs.jquery.com/ticket/10807">#10807</a>: Non-ascii apostrophe in comment</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/KZSavnvHd0o" width="1"/></div>
    </content>
    <updated>2011-11-22T02:39:54Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/21/jquery-1-7-1-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-03-25T09:14:23Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1776</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/NBQ-53JmZAg/" rel="alternate" type="text/html"/>
    <title>Getting Board of jQuery</title>
    <summary>TL;DR The body responsible for overseeing jQuery’s finances and administration, which was until today known as the jQuery Team, is now called the jQuery Board. The jQuery Team is for anyone who invests a significant amount of time contributing to jQuery and its related projects. As jQuery has grown from a cool idea in 2005 [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><strong>TL;DR The body responsible for overseeing jQuery’s finances and administration, which was until today known as the jQuery Team, is now called the jQuery Board. The jQuery Team is for anyone who invests a significant amount of time contributing to jQuery and its related projects.</strong></p>
<p>As jQuery has grown from a <a href="http://ejohn.org/blog/selectors-in-javascript/" title="Selectors In Javascript">cool idea in 2005</a> to <a href="http://trends.builtwith.com/javascript/top" target="_blank">the most widely used piece of JavaScript on the Internet today</a>, so too has the organizational structure required to support its development and its community. Over time, e-mail chains became mailing lists, and out of those lists evolved a casual confederation known as the jQuery Team. To join this team, all you had to do was make a consistent contribution to some aspect of the project and eventually John would add your name to a page in our docs wiki.</p>
<p>By 2009, the team wanted to solidify the long-term future of the project, so we accepted an invitation to <a href="http://blog.jquery.com/2009/12/03/jquery-joins-the-software-freedom-conservancy/" target="_blank">join the Software Freedom Conservancy</a>, from whom we’ve since received great amounts of administrative and legal support. Though the SFC offers that “Projects can continue to operate in the same way they did before joining the Conservancy without having to select a board of directors or any other layer of corporate management,” the team chose to implement a governance system whereby the project’s official decisions would be communicated to the Conservancy after a <a href="https://groups.google.com/group/jquery-board-public" target="_blank">public vote</a> by the members of the “core team,” which initially had 21 members. This conferred a significant amount of formality onto what had been a relatively ad hoc process, and while the system has worked well, it has been accompanied by some confusion.</p>
<ul>
<li>On one hand, there’s the voting membership, responsible primarily for financial and managerial decisions concerning the entire project. On the other, there’s an actual group of people who are working on jQuery Core itself. Both of these groups are sometimes called the jQuery Core Team, which is fairly misleading.</li>
<li>As new people come along and become active contributors to some part of the project, it’s not fun to tell them, “Hey, great job, but you’re *not* on the team!”</li>
<li>Just because you are really interested in hacking on jQuery Core, UI, or Mobile (or working on docs, or any of the many other ways you can help out the project) doesn’t mean you have the slightest desire to sit in long meetings, discussing how to allocate funds and how to improve beverage service at the next conference.</li>
<li>As people’s lives ebb and flow, it’s normal that their capacity to contribute changes. What’s the right correlation between being a genuinely active contributor in the present tense and having a vote in the project’s big-picture management?</li>
</ul>
<p>In order to attempt to resolve some of this confusion and make clearer the group’s purpose, <strong>the jQuery Team is now known as the jQuery Board</strong>, and all the governance rules that applied to the Team now apply to the Board. The Board is responsible for</p>
<ul>
<li>approving and appropriating expenditures</li>
<li>representing the intentions of the jQuery Project to the SFC</li>
<li>overseeing and directing the Subteams and selecting the Subteam Leads responsible for each of the facets of the project</li>
<li>voting on its own composition</li>
</ul>
<p>If you’ve always wanted to be “on the team,” but were unsure of what it meant or what you would do, this is good news! We’re fully embracing <a href="http://en.wikipedia.org/wiki/Team" target="_blank">the Wikipedia definition of team</a>: a group of people (or animals!) linked in a common purpose. As such,<strong> anyone who volunteers, over a sustained period of time, to serve actively on a jQuery Subteam will be invited to join the jQuery Team </strong>(at the discretion of the Subteam Lead), so you can feel good putting that on your slide decks, refrigerators, and so forth.</p>
<p>What isn’t changing is the fact that if you are passionate about web development and trying to find a way to make a difference to developers around the world, there is a place for you in the jQuery community. Hop onto <a href="http://forum.jquery.com/" target="_blank">the forum</a> and give another developer a hand. Head over to our <a href="http://bugs.jquery.com" target="_blank" title="jQuery Bug Tracker">various</a> <a href="http://bugs.jqueryui.com" target="_blank" title="jQuery UI Bug Tracker">bug</a> <a href="https://github.com/jquery/jquery-mobile/issues" target="_blank" title="jQuery Mobile Issues on Github">trackers</a> and help triage the open issues — or <a href="http://weblog.bocoup.com/javascript-jquery-bug-fixing-guide" target="_blank" title="jQuery Bug Fixing Guide">dive in and see if you can provide a patch</a>. If you just want to get a lay of the land, join the <a href="http://jquery.org/meeting" target="_blank">weekly IRC meetings</a>. Want to work on a particular project? Take a look through the <a href="http://jquery.org/team" target="_blank">updated team page</a> and get in touch with the right subteam lead! One thing’s for sure:</p>
<p><a href="http://blog.jquery.com/wp-content/uploads/2011/11/jquery_iwantyou.jpg"><img alt="jQuery wants you!" class="aligncenter size-medium wp-image-1777" height="300" src="http://blog.jquery.com/wp-content/uploads/2011/11/jquery_iwantyou-269x300.jpg" title="jQuery wants you!" width="269"/></a></p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/NBQ-53JmZAg" width="1"/></div>
    </content>
    <updated>2011-11-18T22:11:50Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/18/getting-board-of-jquery/</feedburner:origlink>
    <author>
      <name>Adam J. Sontag</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-03-21T09:14:43Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1765</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/nFgyi0GqPRI/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7.1 RC1 Released</title>
    <summary>Just to let you know we’re not asleep at the switch around jQuery Central, we’ve got a new preview release of jQuery. It fixes the problems reported by the community since the original 1.7 release. Please test the code in your applications, making sure that there are no major problems. If you tried jQuery 1.7 [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Just to let you know we’re not asleep at the switch around jQuery Central, we’ve got a new preview release of jQuery. It fixes the problems reported by the community since the original 1.7 release. Please test the code in your applications, making sure that there are no major problems. If you tried jQuery 1.7 and reported a bug, it should be fixed in this release.</p>
<p>You can get the code from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7.1rc1.js">http://code.jquery.com/jquery-1.7.1rc1.js</a></li>
<li><a href="http://code.jquery.com/jquery-1.7.1rc1.min.js">http://code.jquery.com/jquery-1.7.1rc1.min.js</a></li>
</ul>
<p>You can help us by dropping that code into your existing application and letting us know that if anything no longer works. Please <a href="http://bugs.jquery.com/">file a bug</a> and be sure to mention that you’re testing against jQuery 1.7.1 RC1.</p>
<p>We want to encourage everyone from the community to try and <a href="http://docs.jquery.com/Getting_Involved">get involved</a> in contributing back to jQuery core. We’ve set up a <a href="http://docs.jquery.com/Getting_Involved">full page</a> of information dedicated towards becoming more involved with the team. The team is here and ready to help you help us!</p>
<h2>jQuery 1.7.1 RC1 Change Log</h2>
<p>The current change log of the 1.7.1 RC1 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10723">#10723</a>: jqXHR.always() returns a Promise instead of a jqXHR object</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10724">#10724</a>: $(document).text() always returns an empty string</li>
<li><a href="http://bugs.jquery.com/ticket/10773">#10773</a>: removeAttr is fragile for edge cases</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10630">#10630</a>: Fix focus-related test failures to resolve Swarm failures</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10616">#10616</a>: Type coersion not done for -1 in .eq</li>
<li><a href="http://bugs.jquery.com/ticket/10646">#10646</a>: Have jQuery.error throw instanceof Error object</li>
<li><a href="http://bugs.jquery.com/ticket/10682">#10682</a>: Creating DOM elements with $(‘ ‘) leaks memory and skips the fragment cache</li>
<li><a href="http://bugs.jquery.com/ticket/10687">#10687</a>: jQuery calls the AMD define() global function too early</li>
<li><a href="http://bugs.jquery.com/ticket/10690">#10690</a>: isNumeric</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10733">#10733</a>: remove uses of jQuery.each in css module in favor of a for loop</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10675">#10675</a>: Use internalKey shortcut instead of jQuery.expando</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10669">#10669</a>: .animate() no longer animates percentage(%) width</li>
<li><a href="http://bugs.jquery.com/ticket/10750">#10750</a>: A “null” in the data object can cause an error in stop</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10676">#10676</a>: wheelDelta not added to mousewheel event anymore</li>
<li><a href="http://bugs.jquery.com/ticket/10701">#10701</a>: Problems with submit forms using submit function</li>
<li><a href="http://bugs.jquery.com/ticket/10704">#10704</a>: special.handle method should fire under origType name</li>
<li><a href="http://bugs.jquery.com/ticket/10705">#10705</a>: off bug event name parser</li>
<li><a href="http://bugs.jquery.com/ticket/10712">#10712</a>: Triggering blur with live bind broken</li>
<li><a href="http://bugs.jquery.com/ticket/10717">#10717</a>: A triggered load bubbles up to window</li>
<li><a href="http://bugs.jquery.com/ticket/10791">#10791</a>: Delegated Events fail on SVG elements</li>
<li><a href="http://bugs.jquery.com/ticket/10794">#10794</a>: .triggerHandler should not .preventDefault()</li>
<li><a href="http://bugs.jquery.com/ticket/10798">#10798</a>: live(“submit”) and .submit() would cause unobtrusive ajax live to fire twice</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10177">#10177</a>: index of callback function in .wrap is always 0</li>
<li><a href="http://bugs.jquery.com/ticket/10667">#10667</a>: HTML5 Support in .wrapAll() does add a “:” to element</li>
<li><a href="http://bugs.jquery.com/ticket/10670">#10670</a>: rnoshimcache probably not constructed correctly</li>
<li><a href="http://bugs.jquery.com/ticket/10812">#10812</a>: passing empty object to .before() or .after() throws exception in IE7</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10691">#10691</a>: remove all occurrences of the “equals” and “same” function in the unit tests`</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10629">#10629</a>: IE is much too sensitive concerning the fake body. Explore cleaning up support.js to avoid any future crashes</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/nFgyi0GqPRI" width="1"/></div>
    </content>
    <updated>2011-11-18T00:35:03Z</updated>
    <category term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/17/jquery-1-7-1-rc1-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-03-20T08:14:28Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1739</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/i6oUrwDGbAo/" rel="alternate" type="text/html"/>
    <title>Upcoming jQuery Events</title>
    <summary>jQuery Summit 2011 It’s that time of the year again (no, not Christmas!, something almost better!) – the annual (online) jQuery Summit. This year Environment For Humans (E4H) have a terrific line-up including sessions on jQuery plugin authoring best practices, creating interactive experiences with HTML5 and Popcorn.js and best practices for testing your jQuery code [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h2>jQuery Summit 2011</h2>
<p><img alt="" class="aligncenter" src="http://blog.jquery.com/wp-content/uploads/2011/11/jqm33.jpg"/></p>
<p>It’s that time of the year again (no, not Christmas!, something almost better!) – the annual (online) <a href="http://jquerysummit.com">jQuery Summit</a>. This year <a href="http://www.environmentsforhumans.com/">Environment For Humans (E4H)</a> have a terrific line-up including sessions on jQuery plugin authoring best practices, creating interactive experiences with HTML5 and Popcorn.js and best practices for testing your jQuery code amongst others.</p>
<p>With some of the web’s most experienced jQuery and JavaScript professionals on board to share tips, tricks and their own experiences, you’ll be sure to learn something new that could help with your own projects. If you haven’t attended the summit before, you’re in for a real treat.</p>
<p>The summit is a completely online two-track conference run across two days with a track dedicated to designers and another focused completely on developers. As the event is all online, you can access it live whether you’re at home or in the office. For those worried about missing anything, E4H have you covered; all tickets include high-quality recordings that can be played back at your leisure later on.</p>
<h3>Discount:</h3>
<p>If you’re interested in attending, E4H have provided us with a very special 20% off discount code which can be redeemed on their event site. Just enter in <em>20JQUERY</em> when purchasing your ticket or use the following link: <a href="http://jquerysummit2011.eventbrite.com/?discount=20JQUERY">http://jquerysummit2011.eventbrite.com/?discount=20JQUERY</a>.</p>
<h3>Details:</h3>
<p><strong>Sessions:</strong></p>
<ul>
<li>jQuery &amp; CSS Selectors – Estelle Weyl</li>
<li>jQuery &amp; HTML5 Video – Rick Waldron</li>
<li>jQuery UI – Andrew Wirick</li>
<li>Plugin Authoring Best Practices – Ben Alman</li>
<li>jQuery &amp; Browser Plugins – Sarah Chipps</li>
<li>Progressive Enhancement – Nicholas Zakas</li>
<li>jQuery &amp; Responsive Web Design – Dave Rupert</li>
<li>The State of jQuery – Adam Sontag</li>
<li>Large-scale Application Architecture – Addy Osmani</li>
<li>jQuery &amp; iframe Programming – Ben Vinegar</li>
<li>Structuring Your DOM-based Application – Garann Means</li>
<li>Deferreds into jQuery – Dan Heberden</li>
<li>jQuery Development Workflow – Anton Kovalyov</li>
<li>jQuery &amp; Backbone.js – Matt Kelly</li>
<li>jQuery &amp; QUnit – Ben Alman</li>
</ul>
<p><strong>Tickets:</strong> <a href="http://jquerysummit.com">http://jquerysummit.com</a>.</p>
<h3>Dates:</h3>
<p>Designer track: Tuesday, November 15th</p>
<p>Developer track: Wednesday, November 16th</p>
<p> </p>
<h2>jQuery Training At Bocoup</h2>
<p><img alt="" src="http://static.jquery.com/events/2011/sf-bay-area/assets/images/logos/bocoup-horizontal-200.png"/></p>
<p>For those that prefer in-person training, group training is one of the best ways to improve your jQuery skills. Luckily, Boston-based Bocoup has a number of such comprehensive jQuery trainings scheduled for both January and March 2012.</p>
<p>Sessions will be held at The Bocoup Loft in Boston, and 10% of profits will go directly to the jQuery Foundation. If interested, be sure to sign up now since class sizes are limited!.</p>
<p>For more information, checkout <a href="http://training.bocoup.com/comprehensive-jquery/">http://training.bocoup.com/comprehensive-jquery/</a></p>
<p> </p>
<h2>Frontend Workshops in HTML5, JavaScript and jQuery</h2>
<p><img alt="" src="http://blog.jquery.com/wp-content/uploads/2011/11/frontend.png"/></p>
<p>Finally, if you’re interested in learning more general frontend skills, Marc Grabanski is hosting a Frontend Masters Workshop Series for developers looking to earn a mastery in the arts of frontend development.</p>
<p>The training is composed of six workshops that will focus on frontend topics including jQuery, jQuery UI, HTML5 &amp; CSS3, Titanium Mobile and building large JavaScript applications with speakers including jQuery team members Karl Swedberg and Scott Gonzalez.</p>
<p>For tickets and more information, see <a href="http://frontendmasters.com">http://frontendmasters.com</a>.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/i6oUrwDGbAo" width="1"/></div>
    </content>
    <updated>2011-11-11T18:08:56Z</updated>
    <category term="Events"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/11/upcoming-jquery-events/</feedburner:origlink>
    <author>
      <name>Addy Osmani</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-03-09T02:14:24Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1690</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/vI_1E0j9zUA/" rel="alternate" type="text/html"/>
    <title>Building a Slimmer jQuery</title>
    <summary>jQuery is more than five years old now! Over that time it has evolved along with the browsers, web sites, devices, developers, and users that it serves. It has also, um, grown quite a bit over that time. jQuery has added a lot of useful features, but it’s also accumulated cruft that we’d prefer not [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>jQuery is more than five years old now! Over that time it has evolved along with the browsers, web sites, devices, developers, and users that it serves. It has also, um, <a href="http://mathiasbynens.be/demo/jquery-size">grown</a> quite a bit over that time. jQuery has added a lot of useful features, but it’s also accumulated cruft that we’d prefer not to support into perpetuity. It may not be an issue on a desktop PC with a high-speed connection, but we want jQuery to be a good solution for mobile devices as well. </p>
<p>Along with our continuing push for higher performance, our priority for upcoming versions is a smaller gzipped file size. It’s hard to do that when every new feature or bug fix must also preserve all existing features and behavior. So today, we want to start a conversation about slimming down the jQuery API by deprecating some features. Here are our guidelines for deprecation:</p>
<ul>
<li>We don’t believe the feature represents current best practice in the use of jQuery.</li>
<li>The feature has proven unpopular, confusing, inefficient, or ineffective in actual use.</li>
<li>It is not practical or feasible to enhance the feature or address its limitations.</li>
<li>Removing it at some future time could yield notable usability, size, or performance benefits.</li>
</ul>
<p>Deprecation is just the <em>first</em> step in a process that you can participate in. It is our goal to:</p>
<ul>
<li>Explain the reasons for deprecating a particular feature, as described above.</li>
<li>Give at least one major-point-version, and often more, between deprecation and removal.</li>
<li>Provide alternatives to deprecated features so that migration is not painful.</li>
<li>Listen to community feedback regarding deprecation and removal.</li>
</ul>
<p>Occasionally, as in the situation with event.layerX/layerY in version 1.7, we will make a breaking change with shorter notice if we judge that it will cause less pain to remove the feature immediately than to leave it in. Those will hopefully be rare exceptions.</p>
<h3>Version 1.7 Deprecations</h3>
<p>With those things in mind, we consider the following features to be deprecated as of version 1.7. Existing code that uses them continues to work, but the recommended alternatives are a better choice for compatibility with future versions.</p>
<p><strong>.live() and .die()</strong>: We continue to get many bug reports and see user confusion regarding the quirks of the .live() method. Common issues are now documented on its <a href="http://api.jquery.com/live">updated API page</a>. We strongly advise the use of .on() or .delegate() for new code, since they are better APIs. Given its widespread use it’s unlikely we will remove this API in 1.8, but please do update your code as soon as possible.</p>
<p><strong>Non-standard event properties:</strong> As part of our push to improve event handler performance, we are also deprecating the copying of several event properties from the native event object to the jQuery event object and will remove them in 1.8: attrChange, attrName, relatedNode, and srcElement. Instead of accessing these through <code>event.<em>NAME</em></code> you can access them via <code>event.originalEvent.<em>NAME</em></code> where needed.</p>
<p><strong>$.ajax() Deferred aliases:</strong> In version 1.5 we defined .error()/,success()/.complete() on the jqXHR object as aliases for the Deferred’s .fail()/.done()/.always() methods. Although that seemed like a good idea at the time, it makes jqXHR a non-standard Deferred. That’s not good. Whenever possible, use the deferred/promise method name in preference to the jqXHR one. We still have some work to do here to provide a full migration path, so we are likely to continue supporting the aliases past 1.8.</p>
<p><strong>deferred.isResolved() and deferred.isRejected():</strong> Now that Deferreds and Promises have progress notifications and a convenient .state() method, we are deprecating these older methods and will remove them in 1.8. Getting the state of an N-state object using N-1 Boolean methods is a cruel-code version of “Twenty Questions”. Deferred-based code rarely needs to inspect state, and the string returned now is more convenient for a debugging scenario where it’s often used.</p>
<p><strong>.attr(“value”) on inputs:</strong> For backwards compatibility, we’ve been returning  the current value here (as in “what is currently in the input box”) versus the real attribute (what the <code>value</code> attribute says in the HTML). That leaves us no way to provide the true attribute value, and is confusing since W3C selectors work on the attribute and not the current value. So we are deprecating this behavior and will remove it in 1.8. Always use the <code>.val()</code> method to get the current live value of an input element. Until we can reclaim the attribute, you can use <code>$("selector")[0].getAttribute("value")</code> except on IE 6/7 where that will <em>still</em> return the current value. (Our 1.8 solution will get the attribute value on all browsers and is another reason why we’re anxious to change this.)</p>
<p><strong>.closest(Array) returning Array:</strong> This signature is a bit of a strange bird, it was created for use by the old live events code but it returns an Array rather than a jQuery object. As of 1.8 we plan to remove it. The other signatures of <code>.closest()</code> are here to stay and are not affected.</p>
<p><strong>.data(“events”):</strong> jQuery stores its event-related data in a data object named (wait for it) <code>events</code> on each element. This is an internal data structure so in 1.8 this will be removed from the user data name space so it won’t conflict with items of the same name. jQuery’s event data can still be accessed via <code>jQuery._data(element, "events")</code> but be aware that this is an internal data structure that is undocumented and should not be modified.</p>
<p><strong>$.sub() as a plugin:</strong> Although <code>$.sub()</code> can be useful for creating interference-free zones for plugins, it is not used by jQuery core and not widely used by other code, so we intend to transition it to a plugin in version 1.8 to save space.</p>
<h3>Looking Towards jQuery 1.8</h3>
<p>Given our push for a svelte jQuery, the filter for new features in 1.8 will be stringent. Even performance-related proposals need to be balanced against the space they use or save. Features that can be implemented via plugins, special events, attribute hooks, or other jQuery extension mechanisms are likely to stay outside core for now.</p>
<p>That brings up the question of what we could deprecate in 1.8 and eventually remove to simplify and streamline the library. Those things don’t have to totally disappear; they could move into a separate plugin, for example, and only be included when needed. Take a look at how you use jQuery, and talk about it with your colleagues. </p>
<p>Within a few weeks, we’ll be opening the call for your ideas concerning jQuery 1.8 with another blog post — so start thinking about it now!</p>
<p><strong>Edit:</strong> No, we’re not removing IE6 support yet, and we can’t. As John Resig mentions at every jQuery Conference, most of the sins of IE6 are also visited upon IE7 and IE8, which together still have more than <a href="http://marketshare.hitslink.com/browser-market-share.aspx?qprid=2&amp;qpcustomd=0">one-third</a> of desktop browser market share. It doesn’t make sense to remove support for IE6 until we can whack IE7 and IE8 as well.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/vI_1E0j9zUA" width="1"/></div>
    </content>
    <updated>2011-11-08T20:42:05Z</updated>
    <category term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-03-05T13:14:25Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1642</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/HTkvcAAeHiw/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7 Released</title>
    <summary>jQuery 1.7 is ready for download! You can get the code from the jQuery CDN: http://code.jquery.com/jquery-1.7.js http://code.jquery.com/jquery-1.7.min.js This new release should also be available on the Google and Microsoft CDNs within a day or two. Thanks to your help in testing and reporting bugs during the beta period, we believe we have a solid, stable [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>jQuery 1.7 is ready for download! You can get the code from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7.js">http://code.jquery.com/jquery-1.7.js</a></li>
<li><a href="http://code.jquery.com/jquery-1.7.min.js">http://code.jquery.com/jquery-1.7.min.js</a></li>
</ul>
<p>This new release should also be available on the Google and Microsoft CDNs within a day or two.</p>
<p>Thanks to your help in testing and reporting bugs during the beta period, we believe we have a solid, stable release. If you do find problems, <a href="http://bugs.jquery.com/">file a bug</a> and be sure to choose jQuery 1.7 in the version selection. Also be sure to provide a <a href="http://jsFiddle.net/">jsFiddle test case</a> so we can quickly analyze the problem.</p>

pre { padding: 4px; }

<h2>What’s New in jQuery 1.7</h2>
<p>The <a href="http://api.jquery.com/category/version/1.7/">Version 1.7 tag</a> at the API site is a great way to get up to speed with the new things in this release. Here’s a rundown of the big items in 1.7 and some things not yet mentioned in the API docs.</p>
<h3>New Event APIs: .on() and .off()</h3>
<p>The new <code>.on()</code> and <code>.off()</code> APIs unify all the ways of attaching events to a document in jQuery — and they’re shorter to type!</p>
<pre>$(elements).on( <em>events</em> [, <em>selector</em>] [, <em>data</em>] , <em>handler</em> );
$(elements).off( [ <em>events</em> ] [, <em>selector</em>] [, <em>handler</em>] );
</pre>
<p>When a selector is provided, <code>.on()</code> is similar to <code>.delegate()</code> in that it attaches a delegated event handler, filtered by the selector. When the selector is omitted or <code>null</code> the call is like <code>.bind()</code>. There is one ambiguous case: If the <code>data</code> argument is a string, you must provide either a selector string or <code>null</code> so that the data isn’t mistaken as a selector. Pass an object for <code>data</code> and you’ll never have to worry about special cases.</p>
<p>All the existing event binding methods (and their corresponding unbinding methods) are still there in 1.7, but we recommend that you use <code>.on()</code> for any new jQuery project where you know version 1.7 or higher is in use. Here are some examples of mapping between the old and new API calls:</p>
<pre>$('a').bind('click', myHandler);
$('a').on('click', myHandler);

$('form').bind('submit', { val: 42 }, fn);
$('form').on('submit', { val: 42 }, fn);

$(window).unbind('scroll.myPlugin');
$(window).off('scroll.myPlugin');

$('.comment').delegate('a.add', 'click', addNew);
$('.comment').on('click', 'a.add', addNew);

$('.dialog').undelegate('a', 'click.myDlg');
$('.dialog').off('click.myDlg', 'a');

$('a').live('click', fn);
$(document).on('click', 'a', fn);

$('a').die('click');
$(document).off('click', 'a');
</pre>
<h3>Improved Performance on Delegated Events</h3>
<p>Event delegation has become increasingly important as size and complexity of pages grow. Application frameworks such as Backbone, JavaScriptMVC, and Sproutcore make heavy use of event delegation. With that in mind, jQuery 1.7 event handling was refactored with an eye to making delegated events much faster, especially for the most common cases.</p>
<p>To optimize the code for the most commonly used forms of selectors, we examined a cross-section of code from Google Codesearch. Nearly two-thirds of the selectors used in <code>.live()</code> and <code>.delegate()</code> method calls were in the form <code>tag#id.class</code> where one or more of tag, id, or class were used. By parsing those simple selectors in JavaScript at the time the event was attached, we were able to outperform even the browser’s native-code implementations of <code>matchesSelector</code> during event delivery. For more complex selectors we still use the Sizzle engine, so all existing code should continue to work.</p>
<p>The final result is that delegated events are delivered in about half the time they took in 1.6.4:</p>
<div><img src="http://i.imgur.com/QHvsl.png"/></div>
<h3 id="html5elems">Better Support for HTML5 in IE6/7/8</h3>
<p>Anyone who has tried to use the new HTML5 tags such as <code>&lt;section&gt;</code> has no doubt run across the problem that IE 6/7/8 not only don’t understand these tags, they actually remove them from the document. With jQuery 1.7 we built in support for using HTML5 tags in older IEs with methods like <code>.html()</code>. This support is on par with what previously required <a href="http://jdbartlett.com/innershiv/">innerShiv</a>. <strong>You must still include <a href="http://code.google.com/p/html5shiv/">html5shiv</a> <small>(or Modernizr)</small> in the head of your document in older IEs for HTML5 tag support.</strong> For more background, see <a href="http://paulirish.com/2011/the-history-of-the-html5-shiv/">The Story of the HTML5 Shiv</a>.</p>
<h3>Toggling Animations Work Intuitively</h3>
<p>In previous versions of jQuery, toggling animations such as <code>.slideToggle()</code> or <code>.fadeToggle()</code> would not work properly when animations were stacked on each other and a previous animation was terminated with <code>.stop()</code>. This has been <a href="http://bugs.jquery.com/ticket/8685">fixed</a> in 1.7 so that the animation system remembers the elements’ initial values and resets them in the case where a toggled animation is terminated prematurely.</p>
<h3>Asynchronous Module Definition (AMD)</h3>
<p>jQuery <a href="http://bugs.jquery.com/ticket/7102">now supports</a> the <a href="https://github.com/amdjs/amdjs-api/wiki/AMD">AMD API</a>. Note that jQuery 1.7 is <em>not</em> a script loader itself; it cooperates with AMD-compliant loaders such as RequireJS or curl.js so it can be loaded dynamically and the <code>ready</code> event can be controlled by the loader. Now an AMD-compliant loader can load an unmodified version of jQuery 1.7 from a CDN such as Google’s or Microsoft’s. Many thanks to James Burke (@jrburke) for submitting the patch and unit tests, then waiting patiently for us to incorporate it.</p>
<h3>jQuery.Deferred</h3>
<p>The <a href="http://api.jquery.com/category/deferred-object/"><code>jQuery.Deferred</code></a> object has been extended with new progress handlers and notification methods that call those handlers. This allows you to asynchronously notify listeners of progress in a request without resolving or rejecting the request. In addition, there is a new <code>state()</code> method that returns the current state of the Deferred; it’s primarily useful for debugging.</p>
<p>Deferreds are now implemented using a new <a href="http://api.jquery.com/category/callbacks-object/"><code>jQuery.Callbacks</code></a> feature, a generalized way of queueing and triggering a series of handlers. This feature may be of interest to plugin writers, although Deferreds and the event subsystem provide a higher-level interface for this type of functionality.</p>
<h3>jQuery.isNumeric()</h3>
<p>Inside jQuery we’ve found several situations where we need to know if an argument is numeric, or would be successfully converted to a number if it is some other type. We decided to write and document <a href="http://api.jquery.com/jQuery.isNumeric"><code>jQuery.isNumeric()</code></a> since it’s a useful utility. Pass it an argument of any type and it returns <code>true</code> or <code>false</code> as appropriate.</p>
<h2>Removed Features</h2>
<p><strong>event.layerX and event.layerY:</strong> We have removed these non-standard  properties in version 1.7. Although we normally would have gone through a deprecation notice period for these, Chrome version 16 generates a flood of <a href="http://code.google.com/p/chromium/issues/detail?id=101733">console warning messages</a> on the page. Because of this, we decided to remove them immediately. On platforms that still support these properties, they are available through <code>event.originalEvent.layerX</code> and <code>event.originalEvent.layerY</code>.</p>
<p><strong>jQuery.isNaN():</strong> This undocumented utility function has been removed. It was confusing because it appropriated the name of a built-in JavaScript function but did not have the same semantics. The new <code>jQuery.isNumeric()</code> serves a similar purpose, but has the benefit of being documented and supported. Despite <code>jQuery.isNaN()</code> being undocumented, several projects on Github were using it. We have contacted them and asked that they use <code>jQuery.isNumeric()</code> or some other solution.</p>
<p><strong>jQuery.event.proxy():</strong> This undocumented and deprecated method has been removed. Users should be calling the documented <code>jQuery.proxy</code> method instead.</p>
<h2>The jQuery Team, and Your Part</h2>
<p>I want to recognize the incredible work of our regular team contributors in getting this release out the door, especially Timmy Willison (timmywil on Github), Corey Frang (gnarf), Rick Waldron (rwldrn), and Julian Aubourg (jaubourg). Karl Swedberg (kswedberg) and Addy Osmani (addyosmani) worked hard on getting the new documentation into shape on the API site. Also, thanks to Mike Sherov (mikesherov), a greenhorn contributor who has already created patches for several tricky bugs. Many thanks to all the others who reported bugs, submitted pull requests, reviewed commits, and in other ways made sure we did the best job we possibly could.</p>
<p>Still, we can always use more help, and that is where you can contribute. The simplest and most important thing you can do is occasionally test our work-in-progress against your code and your expectations. It's always located at <a href="http://code.jquery.com/jquery-git.js">http://code.jquery.com/jquery-git.js</a> and a fresh copy is built each time a new commit is made to our <a href="https://github.com/jquery/jquery">master branch at github.com</a>. If you find a bug in a final release, test against jquery-git.js to see if it's already been fixed. It's easy as pie since jsFiddle.net offers an option to test your code with the jquery-git.js file as "jQuery (edge)".</p>
<p>If you'd like to do more, we'd be glad to have you pitch in! We've written a <a href="http://docs.jquery.com/Getting_Involved">document</a> that can get you started with the process, and one or more of us are generally available in the #jquery-dev channel on IRC if you need more help or information. </p>
<h2>jQuery 1.7 Change Log</h2>
<p>The current change log of the 1.7 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9399">#9399</a>: Deprecate jqXHR.success and jqXHR.error</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5479">#5479</a>: removeAttr: remove multiple attributes</li>
<li><a href="http://bugs.jquery.com/ticket/6743">#6743</a>: map enctype to encoding, depending on browser</li>
<li><a href="http://bugs.jquery.com/ticket/10176">#10176</a>: Injected script tag is evaluated twice</li>
<li><a href="http://bugs.jquery.com/ticket/10278">#10278</a>: checkboxEl.attr('checked') returns stale value after checkboxEl.click()</li>
<li><a href="http://bugs.jquery.com/ticket/10429">#10429</a>: IE7 - invalid procedure call or argument when calling removeAttr('contenteditable');</li>
<li><a href="http://bugs.jquery.com/ticket/10514">#10514</a>: removeAttr does not remove the class attribute in IE6/7</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6485">#6485</a>: Solution for HTML5 in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7102">#7102</a>: Register jQuery as a CommonjS async module</li>
<li><a href="http://bugs.jquery.com/ticket/9453">#9453</a>: $.inArray does not support fromIndex</li>
<li><a href="http://bugs.jquery.com/ticket/10478">#10478</a>: Switch jQuery.isNaN to jQuery.isNumeric</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10267">#10267</a>: IE8 and window is(':visible') crashes</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7323">#7323</a>: Allow removing multiple data keys at once with $.fn.removeData</li>
<li><a href="http://bugs.jquery.com/ticket/8909">#8909</a>: $(element).data() will scan all attributes more than needed.</li>
<li><a href="http://bugs.jquery.com/ticket/8921">#8921</a>: jQuery private data should stay private</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8856">#8856</a>: Request: deferred.isUnresolved()</li>
<li><a href="http://bugs.jquery.com/ticket/9033">#9033</a>: try{ } finally{ } error in IE8</li>
<li><a href="http://bugs.jquery.com/ticket/9398">#9398</a>: Proposal for Improved Deferreds</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9434">#9434</a>: .outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() should work on window and document</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5684">#5684</a>: Effects: exception in animation callback causes endless loop</li>
<li><a href="http://bugs.jquery.com/ticket/6150">#6150</a>: .stop sometimes doesn't clear .delay</li>
<li><a href="http://bugs.jquery.com/ticket/6641">#6641</a>: Calling stop() within animation finished callback causes other animations to freeze</li>
<li><a href="http://bugs.jquery.com/ticket/8685">#8685</a>: Animations should keep track of animation state in order to properly address stacked animations</li>
<li><a href="http://bugs.jquery.com/ticket/9280">#9280</a>: Allow multiple effect queues for animate()</li>
<li><a href="http://bugs.jquery.com/ticket/9548">#9548</a>: animate does not work with fill-opacity css property for svg elements</li>
<li><a href="http://bugs.jquery.com/ticket/10445">#10445</a>: Setting queue to true causes an error</li>
<li><a href="http://bugs.jquery.com/ticket/10497">#10497</a>: .stop should allow choosing which queue to stop</li>
<li><a href="http://bugs.jquery.com/ticket/10622">#10622</a>: .show() does not properly restore CSS-set "display" value</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3368">#3368</a>: event.metaKey should be assigned to event.ctrlKey on Non-Mac only</li>
<li><a href="http://bugs.jquery.com/ticket/6170">#6170</a>: jQuery(window).scroll(); causes IE* to scroll to 0,0</li>
<li><a href="http://bugs.jquery.com/ticket/6319">#6319</a>: Regression: stopPropagation inside change handlers in IE is incorrectly applied to keydown event</li>
<li><a href="http://bugs.jquery.com/ticket/6386">#6386</a>: support data argument for live events via "event.special.live.add"</li>
<li><a href="http://bugs.jquery.com/ticket/6593">#6593</a>: IE8: DOM 0 event handler called twice when a separate handler is attached via jQuery</li>
<li><a href="http://bugs.jquery.com/ticket/6667">#6667</a>: submit event doesn't delegate in IE* under certain conditions</li>
<li><a href="http://bugs.jquery.com/ticket/6903">#6903</a>: special events need a way to determine whether they are being bound with .bind vs .live/.delegate</li>
<li><a href="http://bugs.jquery.com/ticket/6942">#6942</a>: JQuery.event.fix causes unnecessary reflows in IE when handling key events</li>
<li><a href="http://bugs.jquery.com/ticket/7139">#7139</a>: "hover" event alias should work for .bind as well as .live</li>
<li><a href="http://bugs.jquery.com/ticket/7161">#7161</a>: Submit event on a form element not unbound properly in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7444">#7444</a>: Submitting form with "Enter" instead of button click on ie8 or ie7 triggers live submit event twice.</li>
<li><a href="http://bugs.jquery.com/ticket/8157">#8157</a>: Focusing an already focused text field will prevent the change event from firing in IE</li>
<li><a href="http://bugs.jquery.com/ticket/8728">#8728</a>: Event 'mouseenter' not firing when the element being left is removed on leaving</li>
<li><a href="http://bugs.jquery.com/ticket/8789">#8789</a>: Meta: Event Property Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/8858">#8858</a>: Special events - _default method doesn't have access to the `data` argument of the trigger method</li>
<li><a href="http://bugs.jquery.com/ticket/8866">#8866</a>: IE8 input[type=file] delegated change event files only on blur</li>
<li><a href="http://bugs.jquery.com/ticket/8982">#8982</a>: bind("unload someOther") =&gt; on unload, handler is not executed only once.</li>
<li><a href="http://bugs.jquery.com/ticket/9069">#9069</a>: when hover over a child of an element, mouseleave fires when using live or delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9279">#9279</a>: delegate() bind does not handle mouseover/mouseout and mouseenter/mouseout correctly for selected elements</li>
<li><a href="http://bugs.jquery.com/ticket/9393">#9393</a>: Unify and DRY out event system</li>
<li><a href="http://bugs.jquery.com/ticket/9593">#9593</a>: Delegated submit event is not instanceof jQuery.Event in IE</li>
<li><a href="http://bugs.jquery.com/ticket/9724">#9724</a>: Infinite loop in trigger function when window.parentNode is a DOM element</li>
<li><a href="http://bugs.jquery.com/ticket/9901">#9901</a>: event.handleObj.namespace incorrect when using .delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9933">#9933</a>: jQuery.fn.toggle() should store state in private data object</li>
<li><a href="http://bugs.jquery.com/ticket/9951">#9951</a>: Wrong order in .trigger() when DOM is modified in a handler</li>
<li><a href="http://bugs.jquery.com/ticket/10375">#10375</a>: Do not include `type` in jQuery.event.props</li>
<li><a href="http://bugs.jquery.com/ticket/10438">#10438</a>: Rename jQuery.event.propHooks =&gt; .fixHooks</li>
<li><a href="http://bugs.jquery.com/ticket/10468">#10468</a>: Remove deprecated jQuery.event.guid and jQuery.event.proxy</li>
<li><a href="http://bugs.jquery.com/ticket/10489">#10489</a>: Disconnected elements bubble to window on .trigger()</li>
<li><a href="http://bugs.jquery.com/ticket/10531">#10531</a>: Consider removing layerX and layerY from $.event.props</li>
<li><a href="http://bugs.jquery.com/ticket/10563">#10563</a>: jQuery.Event no longer contains the element that matched the selector in event delegation.</li>
<li><a href="http://bugs.jquery.com/ticket/10567">#10567</a>: Delegated events incorrectly match class names</li>
<li><a href="http://bugs.jquery.com/ticket/10575">#10575</a>: Breaking changes in live event propagation between 1.6.4 and 1.7rc1</li>
<li><a href="http://bugs.jquery.com/ticket/10576">#10576</a>: jQuery1.7rc1 and jQueryMobile1.0rc2 - IE gets error in jqm triggerCustomEvent method</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6782">#6782</a>: carefully allow more strings to use innerHTML</li>
<li><a href="http://bugs.jquery.com/ticket/7037">#7037</a>: Duplicate mouseover and mouseout events added to cloned element.</li>
<li><a href="http://bugs.jquery.com/ticket/10501">#10501</a>: HTML5 element "innerShiv" inconsistent across html()/append()</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10420">#10420</a>: MouseWheel</li>
<li><a href="http://bugs.jquery.com/ticket/10553">#10553</a>: Further reduction of minimal license header</li>
</ul>
<h3>Selector</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3144">#3144</a>: Inconsistent cross-browser results from .text() method</li>
<li><a href="http://bugs.jquery.com/ticket/5637">#5637</a>: Boolean (and Empty) Attribute Selectors Fail</li>
<li><a href="http://bugs.jquery.com/ticket/6863">#6863</a>: faster getText</li>
<li><a href="http://bugs.jquery.com/ticket/7128">#7128</a>: attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties</li>
<li><a href="http://bugs.jquery.com/ticket/8539">#8539</a>: Sizzle cache collision in browsers without querySelectorAll</li>
<li><a href="http://bugs.jquery.com/ticket/9261">#9261</a>: Has Attribute not working in filter/children/siblings</li>
<li><a href="http://bugs.jquery.com/ticket/9570">#9570</a>: Selector $('form[name=".."]') returns zero elements in IE8 under some conditions</li>
<li><a href="http://bugs.jquery.com/ticket/10178">#10178</a>: $(window).is("a") &gt;&gt; Uncaught TypeError: Cannot call method 'toLowerCase' of undefined</li>
<li><a href="http://bugs.jquery.com/ticket/10315">#10315</a>: Sizzle ignores seed argument when using positional selectors</li>
<li><a href="http://bugs.jquery.com/ticket/10562">#10562</a>: siblings method returns unexpected elements when using Sizzle-invoking pseudo-selectors</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5145">#5145</a>: jQuery.support.opacity = false in the Chrome browser</li>
<li><a href="http://bugs.jquery.com/ticket/6809">#6809</a>:<br/>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/HTkvcAAeHiw" width="1"/></li></ul></div>
    </content>
    <updated>2011-11-03T20:23:16Z</updated>
    <category term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/03/jquery-1-7-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2012-01-24T03:14:26Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1631</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/mICjnRvlLoY/" rel="alternate" type="text/html"/>
    <title>jQuery Conference 2012: United Kingdom Announced</title>
    <summary>We are very happy to announce jQuery Conference 2012: UK, the first jQuery conference in the UK, on 10th February 2012. The conference will be held at the Saïd Business School in Oxford with a line-up including six jQuery team members and four industry experts: Tickets You can read more about the line-up, talks and [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><img alt="jQuery Conference 2012: UK" class="alignnone size-full wp-image-1638" height="66" src="http://blog.jquery.com/wp-content/uploads/2011/11/jqcon-uk-banner.png" title="jQuery Conference 2012: UK" width="590"/></p>
<p>We are very happy to announce <a href="http://events.jquery.org/2012/uk/">jQuery Conference 2012: UK</a>, the first jQuery conference in the UK, on 10th February 2012. The conference will be held at the Saïd Business School in Oxford with a line-up including six jQuery team members and four industry experts:</p>
<div style="text-align: center;"><a href="http://events.jquery.org/2012/uk"><img alt="jQuery Conference 2012: UK Speakers" class="size-full wp-image-1632 aligncenter" height="331" src="http://blog.jquery.com/wp-content/uploads/2011/11/jqcon-uk-speakers.jpg" title="jqcon-uk-speakers" width="519"/></a></div>
<h2>Tickets</h2>
<p>You can read more about the line-up, talks and location on the <a href="http://events.jquery.org/2012/uk/">event site</a> and <a href="http://jqueryuk.eventbrite.co.uk/">tickets are on sale now</a> at EventBrite.</p>
<h2>Organizers</h2>
<p>The event is being organized by Oxford based digital agency <a href="http://www.whiteoctober.co.uk/">White October</a> with the permission of the jQuery project and with the help and support from jQuery team members. Last year, the jQuery events team tried to put together an event outside the USA and we found how very hard it was to secure a venue from so far away. The jQuery Team is very happy to be working with White October in putting the conference together, and we hope to have you join as we make our European debut!</p>
<h2>Sponsorship</h2>
<p>If your company is interested in sponsoring the event please take a look at the <a href="http://events.jquery.org/2012/uk/jquery_uk2012_sponsor_pack.pdf">sponsor pack</a>, please feel free to <a href="mailto:john@whiteoctober.co.uk">email</a> or phone (+44(0)207 976 4894) John at White October to discuss the different options.</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/mICjnRvlLoY" width="1"/></div>
    </content>
    <updated>2011-11-02T03:11:27Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/01/jquery-conference-2012-united-kingdom-announced/</feedburner:origlink>
    <author>
      <name>Ralph Whitbeck</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-12-09T09:14:20Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1587</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/pIvGNXEeRbw/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7 RC2 Released</title>
    <summary>Today, after a very scary Halloween, the jQuery team is releasing jQuery 1.7 RC2 from our Github crypt, er, repo. Barring a report of really terrifying problems or a mob of townspeople at our door with torches, this code will be exactly the same code that becomes the version 1.7 final. If anyone knows of [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Today, after a very scary Halloween, the jQuery team is releasing jQuery 1.7 RC2 from our Github crypt, er, repo. Barring a report of really terrifying problems or a mob of townspeople at our door with torches, this code will be exactly the same code that becomes the version 1.7 final. If anyone knows of any reason why this code should not become a final release, we need to hear you scream!</p>

div.downloadlist {
	position: relative;
	height: 6em;
}
div.stone {
	float: right;
	width: 9em;
	margin: 0 0 1em 1em;
	font: bold 100% Arial, Helvetica, sans-serif;
	color: #fff;
	text-shadow: -1px -1px #000;
	padding: 20px 4px;
	background: #777;
	background-image: linear-gradient(bottom, #333 3%, #777 73%);
	background-image: -o-linear-gradient(bottom, #333 3%, #777 73%);
	background-image: -moz-linear-gradient(bottom, #333 3%, #777 73%);
	background-image: -webkit-linear-gradient(bottom, #333 3%, #777 73%);
	background-image: -ms-linear-gradient(bottom, #333 3%, #777 73%);
	border-top: 1px solid #888;
	border-left: 1px solid #888;
	border-right: 3px solid #000;
	border-bottom: 3px solid #000;
	border-top-left-radius: 40px;
	border-top-right-radius: 40px;
	text-align: center;
}
ul.download {
	list-style-type: none;
	font-size: 120%;
}

<div class="downloadlist">
<div class="stone">
	  HERE LIE THE<br/>
	  BITS FOR RC2;<br/>
	  PLEASE TELL US<br/>
	  IF IT WORKS<br/>
          FOR YOU
	</div>
<ul class="download">
<li><a href="http://code.jquery.com/jquery-1.7rc2.js">http://code.jquery.com/jquery-1.7rc2.js</a></li>
<li><a href="http://code.jquery.com/jquery-1.7rc2.min.js">http://code.jquery.com/jquery-1.7rc2.min.js</a></li>
</ul>
</div>
<p>In RC2, we fixed a tricky problem that sometimes caused Internet Explorer 8 to go full-zombie when jQuery was loaded. Appropriately enough, the crash was related to creating a detached <code>&lt;body&gt;</code> element that we were using to perform feature detection. IE8 seems frightened to a crashy death when it sees a detached body. If you still see any problems with IE8 crashes, please let us know.</p>
<p>Thanks to a bug report from @warrenparsons, we also fixed a <a href="http://bugs.jquery.com/ticket/10622">frightful regression</a> with the <code>.show()</code> method. We really appreciate the efforts from those of you who are testing these pre-release versions. Sure, it’s a lot easier to think, “I’ll try it when it’s finally released,” but then any problems you do find will be preventing you — and possibly hundreds or thousands of others — from upgrading. Now that is <em>really</em> scary, at least to us.</p>
<p>During the next day or so we’ll be conjuring up documentation for many of the 1.7 additions and improvements on <a href="http://api.jquery.com">api.jquery.com</a>. Please bear with us for a few days while we clean up the pages and make sure that it is filled in and all linked properly. For a quick overview of what’s changed, see the <a href="http://api.jquery.com/category/version/1.7/">1.7 category</a>.</p>
<h2>jQuery 1.7 RC 2 Change Log</h2>
<p>The current change log of the 1.7 RC2 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9399">#9399</a>: Deprecate jqXHR.success and jqXHR.error</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5479">#5479</a>: removeAttr: remove multiple attributes</li>
<li><a href="http://bugs.jquery.com/ticket/6743">#6743</a>: map enctype to encoding, depending on browser</li>
<li><a href="http://bugs.jquery.com/ticket/10176">#10176</a>: Injected script tag is evaluated twice</li>
<li><a href="http://bugs.jquery.com/ticket/10278">#10278</a>: checkboxEl.attr(‘checked’) returns stale value after checkboxEl.click()</li>
<li><a href="http://bugs.jquery.com/ticket/10429">#10429</a>: IE7 – invalid procedure call or argument when calling removeAttr(‘contenteditable’);</li>
<li><a href="http://bugs.jquery.com/ticket/10514">#10514</a>: removeAttr does not remove the class attribute in IE6/7</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6485">#6485</a>: Solution for HTML5 in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7102">#7102</a>: Register jQuery as a CommonjS async module</li>
<li><a href="http://bugs.jquery.com/ticket/9453">#9453</a>: $.inArray does not support fromIndex</li>
<li><a href="http://bugs.jquery.com/ticket/10478">#10478</a>: Switch jQuery.isNaN to jQuery.isNumeric</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10267">#10267</a>: IE8 and window is(‘:visible’) crashes</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7323">#7323</a>: Allow removing multiple data keys at once with $.fn.removeData</li>
<li><a href="http://bugs.jquery.com/ticket/8909">#8909</a>: $(element).data() will scan all attributes more than needed.</li>
<li><a href="http://bugs.jquery.com/ticket/8921">#8921</a>: jQuery private data should stay private</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8856">#8856</a>: Request: deferred.isUnresolved()</li>
<li><a href="http://bugs.jquery.com/ticket/9033">#9033</a>: try{ } finally{ } error in IE8</li>
<li><a href="http://bugs.jquery.com/ticket/9398">#9398</a>: Proposal for Improved Deferreds</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9434">#9434</a>: .outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() should work on window and document</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5684">#5684</a>: Effects: exception in animation callback causes endless loop</li>
<li><a href="http://bugs.jquery.com/ticket/6150">#6150</a>: .stop sometimes doesn’t clear .delay</li>
<li><a href="http://bugs.jquery.com/ticket/6641">#6641</a>: Calling stop() within animation finished callback causes other animations to freeze</li>
<li><a href="http://bugs.jquery.com/ticket/8685">#8685</a>: Animations should keep track of animation state in order to properly address stacked animations</li>
<li><a href="http://bugs.jquery.com/ticket/9280">#9280</a>: Allow multiple effect queues for animate()</li>
<li><a href="http://bugs.jquery.com/ticket/9548">#9548</a>: animate does not work with fill-opacity css property for svg elements</li>
<li><a href="http://bugs.jquery.com/ticket/10445">#10445</a>: Setting queue to true causes an error</li>
<li><a href="http://bugs.jquery.com/ticket/10497">#10497</a>: .stop should allow choosing which queue to stop</li>
<li><a href="http://bugs.jquery.com/ticket/10622">#10622</a>: .show() does not properly restore CSS-set “display” value</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3368">#3368</a>: event.metaKey should be assigned to event.ctrlKey on Non-Mac only</li>
<li><a href="http://bugs.jquery.com/ticket/6170">#6170</a>: jQuery(window).scroll(); causes IE* to scroll to 0,0</li>
<li><a href="http://bugs.jquery.com/ticket/6319">#6319</a>: Regression: stopPropagation inside change handlers in IE is incorrectly applied to keydown event</li>
<li><a href="http://bugs.jquery.com/ticket/6386">#6386</a>: support data argument for live events via “event.special.live.add”</li>
<li><a href="http://bugs.jquery.com/ticket/6593">#6593</a>: IE8: DOM 0 event handler called twice when a separate handler is attached via jQuery</li>
<li><a href="http://bugs.jquery.com/ticket/6667">#6667</a>: submit event doesn’t delegate in IE* under certain conditions</li>
<li><a href="http://bugs.jquery.com/ticket/6903">#6903</a>: special events need a way to determine whether they are being bound with .bind vs .live/.delegate</li>
<li><a href="http://bugs.jquery.com/ticket/6942">#6942</a>: JQuery.event.fix causes unnecessary reflows in IE when handling key events</li>
<li><a href="http://bugs.jquery.com/ticket/7139">#7139</a>: “hover” event alias should work for .bind as well as .live</li>
<li><a href="http://bugs.jquery.com/ticket/7161">#7161</a>: Submit event on a form element not unbound properly in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7444">#7444</a>: Submitting form with “Enter” instead of button click on ie8 or ie7 triggers live submit event twice.</li>
<li><a href="http://bugs.jquery.com/ticket/8157">#8157</a>: Focusing an already focused text field will prevent the change event from firing in IE</li>
<li><a href="http://bugs.jquery.com/ticket/8728">#8728</a>: Event ‘mouseenter’ not firing when the element being left is removed on leaving</li>
<li><a href="http://bugs.jquery.com/ticket/8789">#8789</a>: Meta: Event Property Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/8858">#8858</a>: Special events – _default method doesn’t have access to the `data` argument of the trigger method</li>
<li><a href="http://bugs.jquery.com/ticket/8866">#8866</a>: IE8 input[type=file] delegated change event files only on blur</li>
<li><a href="http://bugs.jquery.com/ticket/8982">#8982</a>: bind(“unload someOther”) =&gt; on unload, handler is not executed only once.</li>
<li><a href="http://bugs.jquery.com/ticket/9069">#9069</a>: when hover over a child of an element, mouseleave fires when using live or delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9279">#9279</a>: delegate() bind does not handle mouseover/mouseout and mouseenter/mouseout correctly for selected elements</li>
<li><a href="http://bugs.jquery.com/ticket/9393">#9393</a>: Unify and DRY out event system</li>
<li><a href="http://bugs.jquery.com/ticket/9593">#9593</a>: Delegated submit event is not instanceof jQuery.Event in IE</li>
<li><a href="http://bugs.jquery.com/ticket/9724">#9724</a>: Infinite loop in trigger function when window.parentNode is a DOM element</li>
<li><a href="http://bugs.jquery.com/ticket/9901">#9901</a>: event.handleObj.namespace incorrect when using .delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9933">#9933</a>: jQuery.fn.toggle() should store state in private data object</li>
<li><a href="http://bugs.jquery.com/ticket/9951">#9951</a>: Wrong order in .trigger() when DOM is modified in a handler</li>
<li><a href="http://bugs.jquery.com/ticket/10375">#10375</a>: Do not include `type` in jQuery.event.props</li>
<li><a href="http://bugs.jquery.com/ticket/10438">#10438</a>: Rename jQuery.event.propHooks =&gt; .fixHooks</li>
<li><a href="http://bugs.jquery.com/ticket/10468">#10468</a>: Remove deprecated jQuery.event.guid and jQuery.event.proxy</li>
<li><a href="http://bugs.jquery.com/ticket/10489">#10489</a>: Disconnected elements bubble to window on .trigger()</li>
<li><a href="http://bugs.jquery.com/ticket/10531">#10531</a>: Consider removing layerX and layerY from $.event.props</li>
<li><a href="http://bugs.jquery.com/ticket/10563">#10563</a>: jQuery.Event no longer contains the element that matched the selector in event delegation.</li>
<li><a href="http://bugs.jquery.com/ticket/10567">#10567</a>: Delegated events incorrectly match class names</li>
<li><a href="http://bugs.jquery.com/ticket/10575">#10575</a>: Breaking changes in live event propagation between 1.6.4 and 1.7rc1</li>
<li><a href="http://bugs.jquery.com/ticket/10576">#10576</a>: jQuery1.7rc1 and jQueryMobile1.0rc2 – IE gets error in jqm triggerCustomEvent method</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6782">#6782</a>: carefully allow more strings to use innerHTML</li>
<li><a href="http://bugs.jquery.com/ticket/7037">#7037</a>: Duplicate mouseover and mouseout events added to cloned element.</li>
<li><a href="http://bugs.jquery.com/ticket/10501">#10501</a>: HTML5 element “innerShiv” inconsistent across html()/append()</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10420">#10420</a>: MouseWheel</li>
<li><a href="http://bugs.jquery.com/ticket/10553">#10553</a>: Further reduction of minimal license header</li>
</ul>
<h3>Selector</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3144">#3144</a>: Inconsistent cross-browser results from .text() method</li>
<li><a href="http://bugs.jquery.com/ticket/5637">#5637</a>: Boolean (and Empty) Attribute Selectors Fail</li>
<li><a href="http://bugs.jquery.com/ticket/6863">#6863</a>: faster getText</li>
<li><a href="http://bugs.jquery.com/ticket/7128">#7128</a>: attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties</li>
<li><a href="http://bugs.jquery.com/ticket/8539">#8539</a>: Sizzle cache collision in browsers without querySelectorAll</li>
<li><a href="http://bugs.jquery.com/ticket/9261">#9261</a>: Has Attribute not working in filter/children/siblings</li>
<li><a href="http://bugs.jquery.com/ticket/9570">#9570</a>: Selector $(‘form[name=".."]‘) returns zero elements in IE8 under some conditions</li>
<li><a href="http://bugs.jquery.com/ticket/10178">#10178</a>: $(window).is(“a”) &gt;&gt; Uncaught TypeError: Cannot call method ‘toLowerCase’ of undefined</li>
<li><a href="http://bugs.jquery.com/ticket/10315">#10315</a>: Sizzle ignores seed argument when using positional selectors</li>
<li><a href="http://bugs.jquery.com/ticket/10562">#10562</a>: siblings method returns unexpected elements when using Sizzle-invoking pseudo-selectors</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5145">#5145</a>: jQuery.support.opacity = false in the Chrome browser</li>
<li><a href="http://bugs.jquery.com/ticket/6809">#6809</a>: Add jQuery.support.fixedPosition</li>
<li><a href="http://bugs.jquery.com/ticket/10558">#10558</a>: Test Support bug</li>
<li><a href="http://bugs.jquery.com/ticket/10613">#10613</a>: IE8 doesn’t like a detached body in its head</li>
</ul>
<h3>Traversing</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10449">#10449</a>: Function $(“#id”).closest(“.class”) returns element $(“#id”) itself if it has .class</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/pIvGNXEeRbw" width="1"/></div>
    </content>
    <updated>2011-11-01T16:51:22Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/11/01/jquery-1-7-rc2-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-12-07T11:14:24Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1559</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/XW1UVvjrSN0/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7 RC1 Released</title>
    <summary>The team is getting closer to jQuery 1.7, and today we’re putting out a release candidate. The full list of fixes and features can be found below. We urge everyone to start testing this code in their applications, so we can make sure that there are no major problems before the final release. Testing couldn’t [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The team is getting closer to jQuery 1.7, and today we’re putting out a release candidate. The full list of fixes and features can be found below. We urge everyone to start testing this code in their applications, so we can make sure that there are no major problems before the final release.</p>
<p>Testing couldn’t be simpler, you can get the code from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7rc1.js">http://code.jquery.com/jquery-1.7rc1.js</a></li>
<li><a href="http://code.jquery.com/jquery-1.7rc1.min.js">http://code.jquery.com/jquery-1.7rc1.min.js</a></li>
</ul>
<p>Please help us by dropping that code into your existing application. If you see something, say something. <a href="http://bugs.jquery.com/">File a bug</a> and mention that you’re testing against jQuery 1.7 RC1. If there’s a problem we want to fix it.</p>
<p>In the meantime, we’re working on the documentation and release notes to make sure your transition to 1.7 goes smoothly. Stay tuned!</p>
<h2>jQuery 1.7 RC 1 Change Log</h2>
<p>The current change log of the 1.7 RC 1 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9399">#9399</a>: Deprecate jqXHR.success and jqXHR.error</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5479">#5479</a>: removeAttr: remove multiple attributes</li>
<li><a href="http://bugs.jquery.com/ticket/6743">#6743</a>: map enctype to encoding, depending on browser</li>
<li><a href="http://bugs.jquery.com/ticket/10176">#10176</a>: Injected script tag is evaluated twice</li>
<li><a href="http://bugs.jquery.com/ticket/10278">#10278</a>: checkboxEl.attr(‘checked’) returns stale value after checkboxEl.click()</li>
<li><a href="http://bugs.jquery.com/ticket/10429">#10429</a>: IE7 – invalid procedure call or argument when calling removeAttr(‘contenteditable’);</li>
<li><a href="http://bugs.jquery.com/ticket/10514">#10514</a>: removeAttr does not remove the class attribute in IE6/7</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6485">#6485</a>: Solution for HTML5 in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7102">#7102</a>: Register jQuery as a CommonjS async module</li>
<li><a href="http://bugs.jquery.com/ticket/9453">#9453</a>: $.inArray does not support fromIndex</li>
<li><a href="http://bugs.jquery.com/ticket/10478">#10478</a>: Switch jQuery.isNaN to jQuery.isNumeric</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10267">#10267</a>: IE8 and window is(‘:visible’) crashes</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7323">#7323</a>: Allow removing multiple data keys at once with $.fn.removeData</li>
<li><a href="http://bugs.jquery.com/ticket/8909">#8909</a>: $(element).data() will scan all attributes more than needed.</li>
<li><a href="http://bugs.jquery.com/ticket/8921">#8921</a>: jQuery private data should stay private</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8856">#8856</a>: Request: deferred.isUnresolved()</li>
<li><a href="http://bugs.jquery.com/ticket/9033">#9033</a>: try{ } finally{ } error in IE8</li>
<li><a href="http://bugs.jquery.com/ticket/9398">#9398</a>: Proposal for Improved Deferreds</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9434">#9434</a>: .outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() should work on window and document</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5684">#5684</a>: Effects: exception in animation callback causes endless loop</li>
<li><a href="http://bugs.jquery.com/ticket/6150">#6150</a>: .stop sometimes doesn’t clear .delay</li>
<li><a href="http://bugs.jquery.com/ticket/6641">#6641</a>: Calling stop() within animation finished callback causes other animations to freeze</li>
<li><a href="http://bugs.jquery.com/ticket/8685">#8685</a>: Animations should keep track of animation state in order to properly address stacked animations</li>
<li><a href="http://bugs.jquery.com/ticket/9280">#9280</a>: Allow multiple effect queues for animate()</li>
<li><a href="http://bugs.jquery.com/ticket/9548">#9548</a>: animate does not work with fill-opacity css property for svg elements</li>
<li><a href="http://bugs.jquery.com/ticket/10416">#10416</a>: defaultDisplay returns block instead of table-row for a tr in FF</li>
<li><a href="http://bugs.jquery.com/ticket/10445">#10445</a>: Setting queue to true causes an error</li>
<li><a href="http://bugs.jquery.com/ticket/10497">#10497</a>: .stop should allow choosing which queue to stop</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3368">#3368</a>: event.metaKey should be assigned to event.ctrlKey on Non-Mac only</li>
<li><a href="http://bugs.jquery.com/ticket/6170">#6170</a>: jQuery(window).scroll(); causes IE* to scroll to 0,0</li>
<li><a href="http://bugs.jquery.com/ticket/6319">#6319</a>: Regression: stopPropagation inside change handlers in IE is incorrectly applied to keydown event</li>
<li><a href="http://bugs.jquery.com/ticket/6386">#6386</a>: support data argument for live events via “event.special.live.add”</li>
<li><a href="http://bugs.jquery.com/ticket/6593">#6593</a>: IE8: DOM 0 event handler called twice when a separate handler is attached via jQuery</li>
<li><a href="http://bugs.jquery.com/ticket/6667">#6667</a>: submit event doesn’t delegate in IE* under certain conditions</li>
<li><a href="http://bugs.jquery.com/ticket/6903">#6903</a>: special events need a way to determine whether they are being bound with .bind vs .live/.delegate</li>
<li><a href="http://bugs.jquery.com/ticket/6942">#6942</a>: JQuery.event.fix causes unnecessary reflows in IE when handling key events</li>
<li><a href="http://bugs.jquery.com/ticket/7139">#7139</a>: “hover” event alias should work for .bind as well as .live</li>
<li><a href="http://bugs.jquery.com/ticket/7161">#7161</a>: Submit event on a form element not unbound properly in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7444">#7444</a>: Submitting form with “Enter” instead of button click on ie8 or ie7 triggers live submit event twice.</li>
<li><a href="http://bugs.jquery.com/ticket/8157">#8157</a>: Focusing an already focused text field will prevent the change event from firing in IE</li>
<li><a href="http://bugs.jquery.com/ticket/8728">#8728</a>: Event ‘mouseenter’ not firing when the element being left is removed on leaving</li>
<li><a href="http://bugs.jquery.com/ticket/8789">#8789</a>: Meta: Event Property Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/8858">#8858</a>: Special events – _default method doesn’t have access to the `data` argument of the trigger method</li>
<li><a href="http://bugs.jquery.com/ticket/8866">#8866</a>: IE8 input[type=file] delegated change event files only on blur</li>
<li><a href="http://bugs.jquery.com/ticket/8982">#8982</a>: bind(“unload someOther”) =&gt; on unload, handler is not executed only once.</li>
<li><a href="http://bugs.jquery.com/ticket/9069">#9069</a>: when hover over a child of an element, mouseleave fires when using live or delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9279">#9279</a>: delegate() bind does not handle mouseover/mouseout and mouseenter/mouseout correctly for selected elements</li>
<li><a href="http://bugs.jquery.com/ticket/9393">#9393</a>: Unify and DRY out event system</li>
<li><a href="http://bugs.jquery.com/ticket/9593">#9593</a>: Delegated submit event is not instanceof jQuery.Event in IE</li>
<li><a href="http://bugs.jquery.com/ticket/9724">#9724</a>: Infinite loop in trigger function when window.parentNode is a DOM element</li>
<li><a href="http://bugs.jquery.com/ticket/9901">#9901</a>: event.handleObj.namespace incorrect when using .delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9933">#9933</a>: jQuery.fn.toggle() should store state in private data object</li>
<li><a href="http://bugs.jquery.com/ticket/9951">#9951</a>: Wrong order in .trigger() when DOM is modified in a handler</li>
<li><a href="http://bugs.jquery.com/ticket/10375">#10375</a>: Do not include `type` in jQuery.event.props</li>
<li><a href="http://bugs.jquery.com/ticket/10438">#10438</a>: Rename jQuery.event.propHooks =&gt; .fixHooks</li>
<li><a href="http://bugs.jquery.com/ticket/10468">#10468</a>: Remove deprecated jQuery.event.guid and jQuery.event.proxy</li>
<li><a href="http://bugs.jquery.com/ticket/10489">#10489</a>: Disconnected elements bubble to window on .trigger()</li>
<li><a href="http://bugs.jquery.com/ticket/10531">#10531</a>: Consider removing layerX and layerY from $.event.props</li>
<li><a href="http://bugs.jquery.com/ticket/10563">#10563</a>: jQuery.Event no longer contains the element that matched the selector in event delegation.</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6782">#6782</a>: carefully allow more strings to use innerHTML</li>
<li><a href="http://bugs.jquery.com/ticket/7037">#7037</a>: Duplicate mouseover and mouseout events added to cloned element.</li>
<li><a href="http://bugs.jquery.com/ticket/10501">#10501</a>: HTML5 element “innerShiv” inconsistent across html()/append()</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10553">#10553</a>: Further reduction of minimal license header</li>
</ul>
<h3>Selector</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3144">#3144</a>: Inconsistent cross-browser results from .text() method</li>
<li><a href="http://bugs.jquery.com/ticket/5637">#5637</a>: Boolean (and Empty) Attribute Selectors Fail</li>
<li><a href="http://bugs.jquery.com/ticket/6863">#6863</a>: faster getText</li>
<li><a href="http://bugs.jquery.com/ticket/7128">#7128</a>: attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties</li>
<li><a href="http://bugs.jquery.com/ticket/8539">#8539</a>: Sizzle cache collision in browsers without querySelectorAll</li>
<li><a href="http://bugs.jquery.com/ticket/9261">#9261</a>: Has Attribute not working in filter/children/siblings</li>
<li><a href="http://bugs.jquery.com/ticket/9570">#9570</a>: Selector $(‘form[name=".."]‘) returns zero elements in IE8 under some conditions</li>
<li><a href="http://bugs.jquery.com/ticket/10178">#10178</a>: $(window).is(“a”) &gt;&gt; Uncaught TypeError: Cannot call method ‘toLowerCase’ of undefined</li>
<li><a href="http://bugs.jquery.com/ticket/10315">#10315</a>: Sizzle ignores seed argument when using positional selectors</li>
<li><a href="http://bugs.jquery.com/ticket/10562">#10562</a>: siblings method returns unexpected elements when using Sizzle-invoking pseudo-selectors</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5145">#5145</a>: jQuery.support.opacity = false in the Chrome browser</li>
<li><a href="http://bugs.jquery.com/ticket/6809">#6809</a>: Add jQuery.support.fixedPosition</li>
<li><a href="http://bugs.jquery.com/ticket/10558">#10558</a>: Test Support bug</li>
</ul>
<h3>Traversing</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10449">#10449</a>: Function $(“#id”).closest(“.class”) returns element $(“#id”) itself if it has .class</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/XW1UVvjrSN0" width="1"/></div>
    </content>
    <updated>2011-10-24T22:22:49Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/10/24/jquery-1-7-rc1-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-29T03:14:26Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1566</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/4-ZgHQ02sW8/" rel="alternate" type="text/html"/>
    <title>Announcing The jQuery Standards Team</title>
    <summary>Today we’re happy to announce the creation of a new jQuery sub-team called the jQuery Standards Team to give web developers a voice in the standards process. Introduction We all know that web standards are important. They help ensure the code we write works across different technologies, for people of different abilities and most importantly [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Today we’re happy to announce the creation of a new jQuery sub-team called the jQuery Standards Team to give web developers a voice in the standards process.</p>
<h2>Introduction</h2>
<p>We all know that web standards are important. They help ensure the code we write works across different technologies, for people of different abilities and most importantly across all browsers. </p>
<p>That said, how often do we all feel our voices, suggestions and ideas are heard by those groups responsible for defining these standards? The reality is that whilst many of us would like to see change, due to time restrictions and lengthy formal processes we’re unable to participate in standards discussions, get involved with writing specifications and contribute to meetings about the future of features. This makes it difficult for web developers to have a voice.</p>
<p>
<figure style="width: 295px; display: block; text-align: center; float: right;">
    <img src="http://gravatar.com/avatar/428167a3ec72235ba971162924492609?s=140"/><img src="http://gravatar.com/avatar/ffe68d6f71b225f7661d33f2a8908281?s=140"/><br/>
    <br/>
    Yehuda Katz is team lead. Paul Irish joins him.<br/>
    
</figure>
</p><p>Another problem is that for those that do get involved with the process, it can often feel like participating on a particular thread in standards mailing lists has a limited impact because the web community is so fragmented. Browser vendors are very active on these lists and there’s a tremendous amount of institutional knowledge assumed in almost all threads. Implementors on those lists have their own venues for discussing areas of shared concerns, but web developers wishing to particpate don’t, with the exception of the accidental meetups at conferences.</p>
<p>The jQuery project would like to help change this – we want you to have a voice in how the future of the web is shaped.</p>
<h2>The jQuery Standards Team</h2>
<p>The jQuery Standards Team has three primary goals:</p>
<ul>
<li>To represent the web developer community, in particular jQuery users, to standards bodies such as the W3C and TC39 with the intention of improving existing standards and standards in progress to better meet the needs of web developers.</li>
<li>To represent the web developer community, and especially jQuery users, to browser vendors with the intent of helping them identify standards that they should prioritize for implementing, and proofs of concept that they can build.</li>
<li>To help the jQuery project adopt new standards and browser features as appropriate.</li>
</ul>
<p>This marks a large change in the way the web developer community is able to submit feedback and influence both standards bodies and specifications. By lowering the barrier of entry to having suggestions and issues about current implementations heard, we hope to encourage more developers with an interest in dealing with standards bodies and browser vendors an opportunity to participate in the process.</p>
<p>The jQuery Standards Team is driven by jQuery team members Yehuda Katz and Paul Irish who some of you may know. Yeuhda and Paul have extenstively worked with standards bodies and browser vendors in a number of capacities over the years, with their individual work on SproutCore and Chrome Developer Relations providing them additional perspectives that will be useful when advocating for the community. </p>
<p><a href="https://github.com/jquery/standards"><img src="http://blog.jquery.com/wp-content/uploads/2011/10/jquerystandards-ss.jpg"/></a></p>
<p>You may be wondering why we feel this team deserves to represent the wider web developer community. Because jQuery is used by such a large percentage of sites on the web (<a href="https://twitter.com/#!/builtwith/status/126908558385229824">over 50%</a> of the top 10,000 sites), we have a good feel for what problems and challenges are commonly faced and what issues with existing implementations we need to try working around. As jQuery is also so focused on DOM-manipulation, the library offers a good source of information for known implementation issues and their (current) best solutions. </p>
<p>Although the current team is primarily composed of jQuery team members, we want to get as many developers passionate about standards and specifications involved with the team as possible. At the end of the day, the team’s goal is to to help identify web developers interested in the process and give us all a forum for both discussing the process, ideas and shared areas of concern. We believe that working together, we can all help build a better web.</p>
<h2>Getting Involved</h2>
<p>If you’re interested in getting involved with the jQuery Standards Team, the easiest way is to sign up for <a href="https://groups.google.com/forum/#!forum/jquery-standards">the Google Group</a>. Similar to other jQuery sub-teams, there are going to be regular public meetings in <a href="http://jquery.org/meeting/">#jquery-meeting on freenode</a> (date TBA) to discuss how the team can be as effective as possible in promoting the needs of the web developer community.</p>
<p>You might have already seen Paul’s post <a href="http://paulirish.com/2011/what-feature-would-improve-the-web/">What feature would improve the web?</a> — if your feedback was captured there, you’ve already gotten involved. ;)</p>
<p>You can also report (or comment) on standard or specification issues in the issue tracker on the <a href="https://github.com/jquery/standards">official team Github repo</a>. If you’re posting new issues, try to identify problems with specs or standards that either exist or are currently being proposed. Here’s <a href="https://github.com/jquery/standards/issues/2">a great example of one such issue</a>. </p>
<p>We want to collect well-specified and articulated issues with the web ecosystem and advocate for improvements with the standards bodies or vendors. For genuine issues, we’ll tag them accordingly (eg. W3C, TC39, Browser-vendor etc.) and if applicable, file tickets with the appropriate standards groups or browser vendors so you don’t have to.</p>
<h2>Conclusions</h2>
<p>By creating this new forum we hope to give a voice to the millions of web developers interested in contributing to the process, but without an easy way to do so. Please let us know what your thoughts are about the team as we want to improve it as much as possible. We look forward to hearing your comments, suggestions and ideas about both it and the standards process!</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/4-ZgHQ02sW8" width="1"/></div>
    </content>
    <updated>2011-10-24T21:33:54Z</updated>
    <category term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/10/24/announcing-the-jquery-standards-team/</feedburner:origlink>
    <author>
      <name>Addy Osmani</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-22T10:14:24Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1550</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/9aIJHCvtolA/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7 Beta 2 Released</title>
    <summary>Hot off the momentum of the jQuery Conference in Boston earlier this month, and based on the community’s valuable feedback, we’re releasing a new beta that incorporates further fixes and improves stability. The full list of fixes and features can be found below. We urge everyone to start testing this code in their applications, so [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Hot off the momentum of the jQuery Conference in Boston earlier this  month, and based on the community’s valuable feedback, we’re releasing a new beta that incorporates further fixes and improves stability. The full list of fixes and features can be found below. We urge everyone to start testing this code in their applications, so we can make sure that there are no major problems before the final release.</p>
<p>You can get the code from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7b2.js">http://code.jquery.com/jquery-1.7b2.js</a></li>
</ul>
<p>Please help us by dropping that code into your existing application. If you see something, say something. <a href="http://bugs.jquery.com/">File a bug</a> and mention that you’re testing against jQuery 1.7 Beta 2. If there’s a problem we want to fix it!</p>
<h2>jQuery 1.7 Beta 2 Change Log</h2>
<p>The current change log of the 1.7 Beta 2 release:</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9399">#9399</a>: Deprecate jqXHR.success and jqXHR.error</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5479">#5479</a>: removeAttr: remove multiple attributes</li>
<li><a href="http://bugs.jquery.com/ticket/10176">#10176</a>: Injected script tag is evaluated twice</li>
<li><a href="http://bugs.jquery.com/ticket/10278">#10278</a>: checkboxEl.attr(‘checked’) returns stale value after checkboxEl.click()</li>
<li><a href="http://bugs.jquery.com/ticket/10429">#10429</a>: IE7 – invalid procedure call or argument when calling removeAttr(‘contenteditable’);</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6485">#6485</a>: Solution for HTML5 in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7102">#7102</a>: Register jQuery as a CommonjS async module</li>
<li><a href="http://bugs.jquery.com/ticket/9453">#9453</a>: $.inArray does not support fromIndex</li>
<li><a href="http://bugs.jquery.com/ticket/10478">#10478</a>: Switch jQuery.isNaN to jQuery.isNumeric</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10267">#10267</a>: IE8 and window is(‘:visible’) crashes</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7323">#7323</a>: Allow removing multiple data keys at once with $.fn.removeData</li>
<li><a href="http://bugs.jquery.com/ticket/8909">#8909</a>: $(element).data() will scan all attributes more than needed.</li>
<li><a href="http://bugs.jquery.com/ticket/8921">#8921</a>: jQuery private data should stay private</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8856">#8856</a>: Request: deferred.isUnresolved()</li>
<li><a href="http://bugs.jquery.com/ticket/9033">#9033</a>: try{ } finally{ } error in IE8</li>
<li><a href="http://bugs.jquery.com/ticket/9398">#9398</a>: Proposal for Improved Deferreds</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9434">#9434</a>: .outerWidth()/.outerHeight()/.innerWidth()/.innerHeight() should work on window and document</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5684">#5684</a>: Effects: exception in animation callback causes endless loop</li>
<li><a href="http://bugs.jquery.com/ticket/6150">#6150</a>: .stop sometimes doesn’t clear .delay</li>
<li><a href="http://bugs.jquery.com/ticket/6641">#6641</a>: Calling stop() within animation finished callback causes other animations to freeze</li>
<li><a href="http://bugs.jquery.com/ticket/8685">#8685</a>: Animations should keep track of animation state in order to properly address stacked animations</li>
<li><a href="http://bugs.jquery.com/ticket/9280">#9280</a>: Allow multiple effect queues for animate()</li>
<li><a href="http://bugs.jquery.com/ticket/9548">#9548</a>: animate does not work with fill-opacity css property for svg elements</li>
<li><a href="http://bugs.jquery.com/ticket/10416">#10416</a>: defaultDisplay returns block instead of table-row for a tr in FF</li>
<li><a href="http://bugs.jquery.com/ticket/10445">#10445</a>: Setting queue to true causes an error</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3368">#3368</a>: event.metaKey should be assigned to event.ctrlKey on Non-Mac only</li>
<li><a href="http://bugs.jquery.com/ticket/6170">#6170</a>: jQuery(window).scroll(); causes IE* to scroll to 0,0</li>
<li><a href="http://bugs.jquery.com/ticket/6319">#6319</a>: Regression: stopPropagation inside change handlers in IE is incorrectly applied to keydown event</li>
<li><a href="http://bugs.jquery.com/ticket/6386">#6386</a>: support data argument for live events via “event.special.live.add”</li>
<li><a href="http://bugs.jquery.com/ticket/6593">#6593</a>: IE8: DOM 0 event handler called twice when a separate handler is attached via jQuery</li>
<li><a href="http://bugs.jquery.com/ticket/6667">#6667</a>: submit event doesn’t delegate in IE* under certain conditions</li>
<li><a href="http://bugs.jquery.com/ticket/6903">#6903</a>: special events need a way to determine whether they are being bound with .bind vs .live/.delegate</li>
<li><a href="http://bugs.jquery.com/ticket/6942">#6942</a>: JQuery.event.fix causes unnecessary reflows in IE when handling key events</li>
<li><a href="http://bugs.jquery.com/ticket/7139">#7139</a>: “hover” event alias should work for .bind as well as .live</li>
<li><a href="http://bugs.jquery.com/ticket/7161">#7161</a>: Submit event on a form element not unbound properly in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7444">#7444</a>: Submitting form with “Enter” instead of button click on ie8 or ie7 triggers live submit event twice.</li>
<li><a href="http://bugs.jquery.com/ticket/8157">#8157</a>: Focusing an already focused text field will prevent the change event from firing in IE</li>
<li><a href="http://bugs.jquery.com/ticket/8728">#8728</a>: Event ‘mouseenter’ not firing when the element being left is removed on leaving</li>
<li><a href="http://bugs.jquery.com/ticket/8789">#8789</a>: Meta: Event Property Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/8858">#8858</a>: Special events – _default method doesn’t have access to the `data` argument of the trigger method</li>
<li><a href="http://bugs.jquery.com/ticket/8866">#8866</a>: IE8 input[type=file] delegated change event files only on blur</li>
<li><a href="http://bugs.jquery.com/ticket/8982">#8982</a>: bind(“unload someOther”) =&gt; on unload, handler is not executed only once.</li>
<li><a href="http://bugs.jquery.com/ticket/9069">#9069</a>: when hover over a child of an element, mouseleave fires when using live or delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9279">#9279</a>: delegate() bind does not handle mouseover/mouseout and mouseenter/mouseout correctly for selected elements</li>
<li><a href="http://bugs.jquery.com/ticket/9393">#9393</a>: Unify and DRY out event system</li>
<li><a href="http://bugs.jquery.com/ticket/9593">#9593</a>: Delegated submit event is not instanceof jQuery.Event in IE</li>
<li><a href="http://bugs.jquery.com/ticket/9724">#9724</a>: Infinite loop in trigger function when window.parentNode is a DOM element</li>
<li><a href="http://bugs.jquery.com/ticket/9901">#9901</a>: event.handleObj.namespace incorrect when using .delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9933">#9933</a>: jQuery.fn.toggle() should store state in private data object</li>
<li><a href="http://bugs.jquery.com/ticket/9951">#9951</a>: Wrong order in .trigger() when DOM is modified in a handler</li>
<li><a href="http://bugs.jquery.com/ticket/10375">#10375</a>: Do not include `type` in jQuery.event.props</li>
<li><a href="http://bugs.jquery.com/ticket/10438">#10438</a>: Rename jQuery.event.propHooks =&gt; .fixHooks</li>
<li><a href="http://bugs.jquery.com/ticket/10468">#10468</a>: Remove deprecated jQuery.event.guid and jQuery.event.proxy</li>
<li><a href="http://bugs.jquery.com/ticket/10489">#10489</a>: Disconnected elements bubble to window on .trigger()</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6782">#6782</a>: carefully allow more strings to use innerHTML</li>
<li><a href="http://bugs.jquery.com/ticket/7037">#7037</a>: Duplicate mouseover and mouseout events added to cloned element.</li>
</ul>
<h3>Selector</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3144">#3144</a>: Inconsistent cross-browser results from .text() method</li>
<li><a href="http://bugs.jquery.com/ticket/5637">#5637</a>: Boolean (and Empty) Attribute Selectors Fail</li>
<li><a href="http://bugs.jquery.com/ticket/6863">#6863</a>: faster getText</li>
<li><a href="http://bugs.jquery.com/ticket/7128">#7128</a>: attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties</li>
<li><a href="http://bugs.jquery.com/ticket/8539">#8539</a>: Sizzle cache collision in browsers without querySelectorAll</li>
<li><a href="http://bugs.jquery.com/ticket/9261">#9261</a>: Has Attribute not working in filter/children/siblings</li>
<li><a href="http://bugs.jquery.com/ticket/9570">#9570</a>: Selector $(‘form[name=".."]‘) returns zero elements in IE8 under some conditions</li>
<li><a href="http://bugs.jquery.com/ticket/10178">#10178</a>: $(window).is(“a”) &gt;&gt; Uncaught TypeError: Cannot call method ‘toLowerCase’ of undefined</li>
<li><a href="http://bugs.jquery.com/ticket/10315">#10315</a>: Sizzle ignores seed argument when using positional selectors</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5145">#5145</a>: jQuery.support.opacity = false in the Chrome browser</li>
<li><a href="http://bugs.jquery.com/ticket/6809">#6809</a>: Add jQuery.support.fixedPosition</li>
</ul>
<h3>Traversing</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10449">#10449</a>: Function $(“#id”).closest(“.class”) returns element $(“#id”) itself if it has .class</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/9aIJHCvtolA" width="1"/></div>
    </content>
    <updated>2011-10-14T01:17:29Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/10/13/jquery-1-7-beta-2-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-21T03:14:22Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>http://bassistance.de/?p=858</id>
    <link href="http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/" rel="alternate" type="text/html"/>
    <title>Release: Validation Plugin 1.9.0</title>
    <summary>An update for the jQuery validation plugin is available. Most notable is heavily improved compability with HTML5 controls: You can apply validation rules to input types like number, email or url, it’ll get picked up by the plugin if the type matches a rule, and a required attribute (with the argument) also works with both jQuery 1.6+ [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>An update for the <a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">jQuery validation plugin</a> is available. Most notable is heavily improved compability with HTML5 controls: You can apply validation rules to input types like number, email or url, it’ll get picked up by the plugin if the type matches a rule, and a required attribute (with the argument) also works with both jQuery 1.6+ (prop) and previous versions (attr).</p>
<p>Another change should make the setup of forms with hidden elements easier, these are now ignored by default (option “ignore” has “:hidden” now as default). In theory, this could break an existing setup. In the unlikely case that it actually does, you can fix it by setting the ignore-option to “[]” (square brackets without the quotes).</p>
<p>A few improvements and bug fixes for validation methods landed:</p>
<ul>
<li>Creditcard now accepts spaces between the other valid characters</li>
<li>Email doesn’t accept a dot character at the end anymore.</li>
<li>The time method (in additionalMethods.js) is now more thorough.</li>
<li>A time12h method got added (also in additionalMethods.js), to validate 12-hour times, while the existing time method does 24-hour times.</li>
</ul>
<p>There also two new localizations, resulting in a total number of 38 localizations. Existing localizations saw various improvements – thanks to everyone who contributed those! Its the only feature where I’m relying completely on contributions, as I can’t verify the correctness of any of the localizations (other then English and German).</p>
<p>Backwards compatibility is still going strong: The plugin should work with anything from jQuery 1.3.x to 1.6.x.</p>
<p><strong><a href="http://jquery.bassistance.de/validate/jquery-validation-1.9.0.zip">Download this release.</a></strong></p>
<p>The full changelog:</p>
<ul>
<li>Added Basque (EU) localization</li>
<li>Added Slovenian (SL) localization</li>
<li>Fixed issue #127 – Finnish translations has one : instead of ;</li>
<li>Fixed Russian localization, minor syntax issue</li>
<li>Added in support for HTML5 input types, fixes #97</li>
<li>Improved HTML5 support by setting novalidate attribute on the form, and reading the type attribute.</li>
<li>Fixed showLabel() removing all classes from error element. Remove only settings.validClass. Fixes #151.</li>
<li>Added ‘pattern’ to additional-methods to validate against arbitraty regular expressions.</li>
<li>Improved email method to not allow the dot at the end (valid by RFC, but unwanted here). Fixes #143</li>
<li>Fixed swedish and norwedian translations, min/max messages got switched. Fixes #181</li>
<li>Fixed #184 – resetForm: should unset lastElement</li>
<li>Fixed #71 – improve existing time method and add time12h method for 12h am/pm time format</li>
<li>Fixed #177 – Fix validation of a single radio or checkbox input</li>
<li>Fixed #189 – :hidden elements are now ignored by default</li>
<li>Fixed #194 – Required as attribute fails if jQuery&gt;=1.6 – Use .prop instead of .attr</li>
<li>Fixed #47, #39, #32 – Allowed credit card numbers to contain spaces as well as dashes (spaces are commonly input by users).</li>
</ul>
<div>As usual:</div>
<ul>
<li>Please post questions to the <a href="http://forum.jquery.com/using-jquery-plugins">official Using jQuery Plugins Forum</a>, tagging your question with (at least) “validate”. Keep your question short and succinct and provide code when possible; a testpage makes it much more likely that you get an useful answer in no time.</li>
<li>Please post bug reports and other contributions (enhancements, features, eg. new validation methods) to the <a href="https://github.com/jzaefferer/jquery-validation/issues">GitHub issue tracker</a></li>
</ul>
<p>Enjoy!</p></div>
    </content>
    <updated>2011-10-07T10:34:51Z</updated>
    <category term="jQuery"/>
    <author>
      <name>Jörn</name>
    </author>
    <source>
      <id>http://bassistance.de</id>
      <link href="http://bassistance.de/category/jquery/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://bassistance.de" rel="alternate" type="text/html"/>
      <subtitle>Jörn Zaefferer on Bass, Geeks and Rock'n'Roll</subtitle>
      <title>bassistance.de » jQuery</title>
      <updated>2012-09-18T03:14:10Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1490</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/bIEUWXiMktY/" rel="alternate" type="text/html"/>
    <title>jQuery 1.7 Beta 1 Released</title>
    <summary>If you hadn’t heard, jQuery Conference 2011 is taking place in Boston later this week. We’ve put together a little something we like to call jQuery 1.7 Beta 1 that we’ll be talking a lot more about at the conference. It’s got a lovely bunch of new features and significant bug fixes–more than 50 of [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>
If you hadn’t heard, <a href="http://events.jquery.org/2011/boston/">jQuery Conference 2011</a> is taking place in Boston later this week. We’ve put together a little something we like to call jQuery 1.7 Beta 1 that we’ll be talking a lot more about at the conference. It’s got a lovely bunch of new features and significant bug fixes–more than 50 of them at last count.
</p>
<p>You can get the beta from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7b1.js">http://code.jquery.com/jquery-1.7b1.js</a></li>
</ul>
<p>Please help us by dropping this code into your existing application and letting us know if anything no longer works. Please <a href="http://bugs.jquery.com/">file a bug ticket</a> and be sure to mention that you’re testing against jQuery 1.7 BETA 1.</p>
<p>Also be sure to explore all the new features and see if your favorite pet-peeve bug has been fixed. If you wait until the final release to do your testing <em>it will be too late!</em></p>
<p>As always, we want to encourage everyone from the community to try and <a href="http://docs.jquery.com/Getting_Involved">get involved</a> in contributing back to jQuery core. We’ve set up a <a href="http://docs.jquery.com/Getting_Involved">full page</a> of information dedicated towards becoming more involved with the team. The team is here and ready to help you help us!</p>
<p>
Oh, you probably want to know what changed, right? Addy Osmani has made a great start with his <a href="http://addyosmani.com/blog/jquery-17-preview/">recent post</a>, so let’s cover the stuff that isn’t on his list.</p>
<p/><h2>New Event APIs: <code>.on()</code> and <code>.off()</code></h2>
<p>
Over time, jQuery has evolved three ways to attach events to elements: <code>.bind()</code> , <code>.live()</code>, and <code>.delegate()</code>. Underneath it all, though, the three event APIs call the browser’s event system; that can lead to surprising interactions. For example, <code>$(document).unbind("click")</code> will remove all <code>.live("click", ...)</code> events, since those delegated events are attached to <code>document</code>. (This is also why you should use <a href="http://www.learningjquery.com/2007/09/namespace-your-events">event namespaces</a>.)
</p>
<p>
Our current event APIs aren’t going away soon, but to address the inconsistencies we’ve introduced a new and simple pair of event methods that can do the work of all three:
</p>
<pre>    $(elems).on(events, selector, data, fn);
    $(elems).off(events, selector, fn);
</pre>
<p>
If a <code>selector</code> is provided, it’s a delegated event; otherwise it’s directly bound. All the features of the old APIs are there; for example <code>events</code> can be a space-separated string of event names and/or namespaces, or it can be an object where the keys are events and the values are event handler functions. Here are some examples of how the old methods map into the new ones:
</p>

#oldnew { width: 100%; }
#oldnew th { text-align: left; }
#oldnew td { font-size: 120%; font-family: Courier, sans-serif; }

<table id="oldnew">
<tbody><tr>
<th>Old API</th>
<th>New API</th>
</tr>
<tr>
<td>$(elems).bind(events, fn)</td>
<td>$(elems).on(events, fn)</td>
</tr>
<tr>
<td>$(elems).bind(events, { mydata: 42 }, fn)</td>
<td>$(elems).on(events, { mydata: 42 }, fn)</td>
</tr>
<tr>
<td>$(elems).unbind(events, fn)</td>
<td>$(elems).off(events, fn)</td>
</tr>
<tr>
<td>$(elems).delegate(selector, events, fn)</td>
<td>$(elems).on(events, selector, fn)</td>
</tr>
<tr>
<td>$(elems).undelegate(selector, events, fn)</td>
<td>$(elems).off(events, selector, fn)</td>
</tr>
<tr>
<td>$(selector).live(events, fn)</td>
<td>$(document).on(events, selector, fn)</td>
</tr>
<tr>
<td>$(selector).die(events, fn)</td>
<td>$(document).off(events, selector, fn)</td>
</tr>
</tbody></table>
<h2>Form Change and Submit Events in IE 6/7/8</h2>
<p>
These old Internet Explorer versions are likely to be haunting us for some time, so we’ve spent a while trying to improve their behavior. Event delivery performance has been greatly improved for them, but the biggest change is that we are using a different approach to fix their non-bubbling and broken form events. As a result we were able to greatly simplify and shorten the special events code. These events should work without any problems–even better than before, since we closed about a half-dozen related bugs–but please keep your eyes open for any unusual behavior.
</p>
<h2>Animation Improvements</h2>
<p>
Before version 1.7, if you stopped an animation before it completed it could create a situation where the element being animated would never return to its full size; it would essentially be stuck at the height that it was when the animation was stopped. We’ve fixed that by remembering the original dimensions before the animation starts so that they can be used later. This eliminates a <em>major</em> annoyance in using certain animations, particularly toggling ones.
</p>
<h2><code>.removeData()</code> Enhancements</h2>
<p>
Addy mentioned this one as well, but the <code>.removeData()</code> API now lets you pass either a space-separated string of names or an array of names to be removed. Since spaces were previously allowed in data names, the code first checks for the exact name as you specified it before splitting the string on spaces. That way, no existing code should break as a result of this enhancement.
</p>
<h2>jQuery 1.7 BETA 1 Change Log</h2>
<p>Here is a complete list of changes made for the 1.7 BETA 1 release.</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9399">#9399</a>: Deprecate jqXHR.success and jqXHR.error</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5479">#5479</a>: removeAttr: remove multiple attributes</li>
<li><a href="http://bugs.jquery.com/ticket/10278">#10278</a>: checkboxEl.attr(‘checked’) returns stale value after checkboxEl.click()</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6485">#6485</a>: Solution for HTML5 in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7102">#7102</a>: Register jQuery as a CommonjS async module</li>
<li><a href="http://bugs.jquery.com/ticket/9453">#9453</a>: $.inArray does not support fromIndex</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10267">#10267</a>: IE8 and window is(‘:visible’) crashes</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7323">#7323</a>: Allow removing multiple data keys at once with $.fn.removeData</li>
<li><a href="http://bugs.jquery.com/ticket/8909">#8909</a>: $(element).data() will scan all attributes more than needed.</li>
<li><a href="http://bugs.jquery.com/ticket/8921">#8921</a>: jQuery private data should stay private</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8856">#8856</a>: Request: deferred.isUnresolved()</li>
<li><a href="http://bugs.jquery.com/ticket/9033">#9033</a>: try{ } finally{ } error in IE8</li>
<li><a href="http://bugs.jquery.com/ticket/9398">#9398</a>: Proposal for Improved Deferreds</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5684">#5684</a>: Effects: exception in animation callback causes endless loop</li>
<li><a href="http://bugs.jquery.com/ticket/6150">#6150</a>: .stop sometimes doesn’t clear .delay</li>
<li><a href="http://bugs.jquery.com/ticket/6641">#6641</a>: Calling stop() within animation finished callback causes other animations to freeze</li>
<li><a href="http://bugs.jquery.com/ticket/8685">#8685</a>: Animations should keep track of animation state in order to properly address stacked animations</li>
<li><a href="http://bugs.jquery.com/ticket/9280">#9280</a>: Allow multiple effect queues for animate()</li>
<li><a href="http://bugs.jquery.com/ticket/9548">#9548</a>: animate does not work with fill-opacity css property for svg elements</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3368">#3368</a>: event.metaKey should be assigned to event.ctrlKey on Non-Mac only</li>
<li><a href="http://bugs.jquery.com/ticket/6170">#6170</a>: jQuery(window).scroll(); causes IE* to scroll to 0,0</li>
<li><a href="http://bugs.jquery.com/ticket/6319">#6319</a>: Regression: stopPropagation inside change handlers in IE is incorrectly applied to keydown event</li>
<li><a href="http://bugs.jquery.com/ticket/6386">#6386</a>: support data argument for live events via “event.special.live.add”</li>
<li><a href="http://bugs.jquery.com/ticket/6593">#6593</a>: IE8: DOM 0 event handler called twice when a separate handler is attached via jQuery</li>
<li><a href="http://bugs.jquery.com/ticket/6667">#6667</a>: submit event doesn’t delegate in IE* under certain conditions</li>
<li><a href="http://bugs.jquery.com/ticket/6705">#6705</a>: focus() causes focus event to be handled twice in IE8</li>
<li><a href="http://bugs.jquery.com/ticket/6903">#6903</a>: special events need a way to determine whether they are being bound with .bind vs .live/.delegate</li>
<li><a href="http://bugs.jquery.com/ticket/6942">#6942</a>: JQuery.event.fix causes unnecessary reflows in IE when handling key events</li>
<li><a href="http://bugs.jquery.com/ticket/7139">#7139</a>: “hover” event alias should work for .bind as well as .live</li>
<li><a href="http://bugs.jquery.com/ticket/7161">#7161</a>: Submit event on a form element not unbound properly in IE</li>
<li><a href="http://bugs.jquery.com/ticket/7444">#7444</a>: Submitting form with “Enter” instead of button click on ie8 or ie7 triggers live submit event twice.</li>
<li><a href="http://bugs.jquery.com/ticket/8157">#8157</a>: Focusing an already focused text field will prevent the change event from firing in IE</li>
<li><a href="http://bugs.jquery.com/ticket/8728">#8728</a>: Event ‘mouseenter’ not firing when the element being left is removed on leaving</li>
<li><a href="http://bugs.jquery.com/ticket/8789">#8789</a>: Meta: Event Property Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/8858">#8858</a>: Special events – _default method doesn’t have access to the `data` argument of the trigger method</li>
<li><a href="http://bugs.jquery.com/ticket/8866">#8866</a>: IE8 input[type=file] delegated change event files only on blur</li>
<li><a href="http://bugs.jquery.com/ticket/8982">#8982</a>: bind(“unload someOther”) =&gt; on unload, handler is not executed only once.</li>
<li><a href="http://bugs.jquery.com/ticket/9069">#9069</a>: when hover over a child of an element, mouseleave fires when using live or delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9279">#9279</a>: delegate() bind does not handle mouseover/mouseout and mouseenter/mouseout correctly for selected elements</li>
<li><a href="http://bugs.jquery.com/ticket/9393">#9393</a>: Unify and DRY out event system</li>
<li><a href="http://bugs.jquery.com/ticket/9593">#9593</a>: Delegated submit event is not instanceof jQuery.Event in IE</li>
<li><a href="http://bugs.jquery.com/ticket/9724">#9724</a>: Infinite loop in trigger function when window.parentNode is a DOM element</li>
<li><a href="http://bugs.jquery.com/ticket/9901">#9901</a>: event.handleObj.namespace incorrect when using .delegate</li>
<li><a href="http://bugs.jquery.com/ticket/9933">#9933</a>: jQuery.fn.toggle() should store state in private data object</li>
<li><a href="http://bugs.jquery.com/ticket/9951">#9951</a>: Wrong order in .trigger() when DOM is modified in a handler</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6782">#6782</a>: carefully allow more strings to use innerHTML</li>
<li><a href="http://bugs.jquery.com/ticket/7037">#7037</a>: Duplicate mouseover and mouseout events added to cloned element.</li>
</ul>
<h3>Selector</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5637">#5637</a>: Boolean (and Empty) Attribute Selectors Fail</li>
<li><a href="http://bugs.jquery.com/ticket/7128">#7128</a>: attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties</li>
<li><a href="http://bugs.jquery.com/ticket/9261">#9261</a>: Has Attribute not working in filter/children/siblings</li>
<li><a href="http://bugs.jquery.com/ticket/9570">#9570</a>: Selector $(‘form[name=".."]‘) returns zero elements in IE8 under some conditions</li>
<li><a href="http://bugs.jquery.com/ticket/10178">#10178</a>: $(window).is(“a”) &gt;&gt; Uncaught TypeError: Cannot call method ‘toLowerCase’ of undefined</li>
<li><a href="http://bugs.jquery.com/ticket/10315">#10315</a>: Sizzle ignores seed argument when using positional selectors</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6809">#6809</a>: Add jQuery.support.fixedPosition</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/bIEUWXiMktY" width="1"/></div>
    </content>
    <updated>2011-09-28T22:10:55Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/09/28/jquery-1-7-beta-1-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-18T20:14:23Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1482</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/8Rp674gGIac/" rel="alternate" type="text/html"/>
    <title>Just Added: HTML5 Training at jQuery Conference Boston!</title>
    <summary>Update: For the first time ever, we have a conference signage sponsor. Thanks to custom signs shop Signazon for your support. The Boston conference is sold out (thanks everyone!), as is the Intro to jQuery training session, but the requests keep coming! In response to popular demand, we’ve added a second training scheduled for Friday, [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Update: For the first time ever, we have a conference signage sponsor. Thanks to <a href="http://www.signazon.com/">custom signs</a> shop Signazon for your support.</p>
<hr/>
<p>The Boston conference is sold out (thanks everyone!), as is the Intro to jQuery training session, but the requests keep coming! In response to popular demand, <a href="http://events.jquery.org/2011/boston/register/">we’ve added a second training scheduled for Friday, September 30th</a>.</p>
<p>The training will focus on HTML5, and be taught by jQuery Core Team Member and Bocoup trainer Richard Worth. The price will be the same $299 (which, if you’ve been paying attention to HTML5 training rates, is a steal!).</p>
<p>Here’s some detail from the training description:</p>
<blockquote><p>HTML5 is the next major milestone in HTML and it’s not just another incremental enhancement; it represents an enormous advance for modern web applications. A large number of HTML5 features are already supported in browsers, so it’s time to start using them!</p>
<p>In our HTML5 for Programmers Workshop, you will learn how to create HTML5 web pages and web applications using semantic HTML5 markup and cross-browser HTML5 JavaScript APIs. After completing this course, students will:</p>
<ul>
<li>Know how to use semantic HTML5 Markup</li>
<li>Know how to use cross-browser HTML5 JavaScript APIs</li>
<li>Understand current browser support for the various HTML5 features</li>
<li>Understand how to polyfill HTML5 features on older browsers</li>
</ul>
<p>Our training takes a step-by-step approach, solidifying fundamental concepts and building on them to leave each attendee with a more thorough understanding of HTML5. Using a 50% lecture / 50% lab format, attendees will be able to put the concepts they have just learned to use after each section.</p>
<ul>
<li>HTML5 Overview</li>
<li>Using HTML5 Today</li>
<li>Markup</li>
<li>Forms</li>
<li>Canvas</li>
<li>Video and Audio</li>
<li>Drag and Drop</li>
<li>Geolocation</li>
<li>Web Storage</li>
<li>Web Workers</li>
<li>Communication and Web Sockets</li>
</ul>
<p>This course is designed for software developers interested in designing, creating, and deploying HTML5 web applications. It is valuable to developers that already have experience in developing web applications. To get the most out of the course, you should be familiar with HTML, CSS, and JavaScript.</p>
<p>Prior exposure to any of these concepts will be helpful, but not required: AJAX, XML, jQuery, HTTP, REST.</p></blockquote>
<p>It’s short notice, but we hope you can make it, so <a href="http://events.jquery.org/2011/boston/register/">register now</a>! As always, feel free to email <a href="mailto:events@jquery.org">events@jquery.org</a> with any event related questions.</p>
<p>See you all at the show!</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/8Rp674gGIac" width="1"/></div>
    </content>
    <updated>2011-09-20T18:34:01Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/09/20/just-added-html5-training-at-jquery-conference-boston/</feedburner:origlink>
    <author>
      <name>Leah Silber</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-13T03:14:20Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1478</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/_LKG-3kqvbU/" rel="alternate" type="text/html"/>
    <title>jQuery 1.6.4 Released</title>
    <summary>jQuery 1.6.4 Released This is a minor point release of jQuery. We’re releasing it fix a couple issues that came up during the release of jQuery 1.6.3. You can get the code from the jQuery CDN: http://code.jquery.com/jquery-1.6.4.js You can help us by dropping that code into your existing application and letting us know that if [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h2>jQuery 1.6.4 Released</h2>
<p>This is a minor point release of jQuery. We’re releasing it fix a couple issues that came up during the release of jQuery 1.6.3.</p>
<p>You can get the code from the jQuery CDN:</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.6.4.js">http://code.jquery.com/jquery-1.6.4.js</a></li>
</ul>
<p>You can help us by dropping that code into your existing application and letting us know that if anything no longer works. Please <a href="http://bugs.jquery.com/">file a bug</a> and be sure to mention that you’re testing against jQuery 1.6.4.</p>
<p>We want to encourage everyone from the community to try and <a href="http://docs.jquery.com/Getting_Involved">get involved</a> in contributing back to jQuery core. We’ve set up a <a href="http://docs.jquery.com/Getting_Involved">full page</a> of information dedicated towards becoming more involved with the team. The team is here and ready to help you help us!</p>
<h2>jQuery 1.6.4 Change Log</h2>
<p>The current change log of the 1.6.4 release.</p>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10194">#10194</a>: Data attribute names with single dash-surrounded letters cannot be accessed by the camel-case name</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10208">#10208</a>: $(“form”).live(“submit”, fn) not fired from &lt;button type=”submit”&gt; in IE8</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10197">#10197</a>: Bug with mime-type application/xhtml+xml in jquery 1.6.3</li>
</ul>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/_LKG-3kqvbU" width="1"/></div>
    </content>
    <updated>2011-09-12T22:57:36Z</updated>
    <category term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/09/12/jquery-1-6-4-released/</feedburner:origlink>
    <author>
      <name>John Resig</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-09T03:14:27Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1470</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/3S-APVM23ck/" rel="alternate" type="text/html"/>
    <title>jQuery 1.6.4 RC1 released</title>
    <summary>jQuery 1.6.4 will be released soon, and we need your help with this release candidate to find any remaining bugs. We’re putting out a new version to address a few last-minute bugs that crept into the 1.6.3 release. With version 1.7 coming next month, we felt it was important to fix these bugs and finalize [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>jQuery 1.6.4 will be released soon, and we need your help with this release candidate to find any remaining bugs. We’re putting out a new version to address a few last-minute bugs that crept into the 1.6.3 release. With version 1.7 coming next month, we felt it was important to fix these bugs and finalize the 1.6.x line before making more extensive changes and feature additions.</p>
<p>Feel free to do your testing by including either one of these files (one minified and one uncompressed). If you find any important differences from 1.6.3, please <a href="http://bugs.jquery.com/">file a bug</a> as soon as possible and be sure to mention that you’re testing against jQuery 1.6.4 RC1. Our preferred venue for test cases is <a href="http://jsfiddle.net">jsFiddle</a>; you can just use the “jQuery (edge)” selection there.</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.6.4rc1.min.js">jQuery 1.6.4 RC1 Minified</a></li>
<li><a href="http://code.jquery.com/jquery-1.6.4rc1.js">jQuery 1.6.4 RC1 Uncompressed</a></li>
</ul>
<h2>jQuery 1.6.4 RC1 Change Log</h2>
<p>The current change log of the 1.6.4 release:</p>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10194">#10194</a>: Data attribute names with single dash-surrounded letters cannot be accessed by the camel-case name</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10208">#10208</a>: $(“form”).live(“submit”, fn) not fired from &lt;button type=”submit”&gt; in IE8</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10197">#10197</a>: Bug with mime-type application/xhtml+xml in jquery 1.6.3</li>
</ul>
<p>Please do file a bug report with a test case as soon as possible if you find problems, as described above. Blog comments or Twitter aren’t helpful bug reports!</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/3S-APVM23ck" width="1"/></div>
    </content>
    <updated>2011-09-09T15:04:52Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/09/09/jquery-1-6-4-rc1-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-05T09:14:19Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>http://www.learningjquery.com/?p=1346</id>
    <link href="http://feedproxy.google.com/~r/LearningJquery/~3/o9n-sU05D_g/using-jquerys-data-apis" rel="alternate" type="text/html"/>
    <title>Using jQuery’s Data APIs</title>
    <summary>In the beginning (well, beginning with jQuery 1.2.3 in early 2008) there was the jQuery.data() API. It offers a way to associate JavaScript data — strings, numbers, or any object — with a DOM element. As long as you manipulate the DOM element with jQuery, the library ensures that when the DOM element goes away, [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In the beginning (well, beginning with jQuery 1.2.3 in early 2008) there was the <a href="http://api.jquery.com/jQuery.data"><code>jQuery.data()</code></a> API. It offers a way to associate JavaScript data — strings, numbers, or any object — with a DOM element. As long as you manipulate the DOM element with jQuery, the library ensures that when the DOM element goes away, the associated data goes away as well. This is especially important for older versions of IE that tend to leak memory when JavaScript data is mixed with DOM data.</p>

<p>Most jQuery code sets data values using the higher-level <a href="http://api.jquery.com/data"><code>.data()</code></a> API; for example, <code>$("div").data("imaDiv", true)</code> sets a boolean value on every <code>div</code> in the document. This API, in turn, calls down to <code>jQuery.data()</code> with each element to set the value. For completeness, there are also <a href="http://api.jquery.com/jQuery.removeData"><code>jQuery.removeData()</code></a> and <a href="http://api.jquery.com/removeData"><code>.removeData()</code></a> to remove data elements, and <a href="http://api.jquery.com/jQuery.hasData"><code>jQuery.hasData()</code></a> to determine if any data is currently set for an element.</p>
<span id="more-1346"/>
<p>So to recap: At the inception of these APIs, they were <em>only</em> about getting and setting values associated with DOM elements in memory. Most importantly, the data was managed to ensure no memory would leak when the DOM elements were removed. Many internal jQuery features such as event handling and toggle state memory use these data APIs and their benefits.</p>

<h4>Enter HTML5</h4>

<p>A few years later, HTML5 became popular and associated another concept with the word "data" through its <a href="http://www.w3.org/TR/html5/elements.html#embedding-custom-non-visible-data-with-the-data-attributes"><code>data-*</code></a> attributes and the associated DOM <a href="http://www.w3.org/TR/html5/elements.html#dom-dataset"><code>.dataset</code></a> property. This isn't quite the same as jQuery's original idea of data: It involves values being associated with HTML elements in markup and not DOM elements in memory. But they are logically close enough that we added the ability to read HTML5 <code>data-*</code> attributes into jQuery's data object starting with version 1.4.</p>

<p>It's not a perfect marriage, though. HTML5 <code>data-*</code> attribute names are more like CSS names; a name like <code>data-shrivel-up</code> is turned into <code>shrivelUp</code> when read in JavaScript-land. No such rules ever applied to jQuery data names in the past, which means we may have to try both <code>shrivel-up</code> and <code>shrivelUp</code> to find a match. We know it's not ideal, but it's a consequence of trying to fit two concepts with differing semantics into a single API.</p>

<h4>Rules of the Road for Data APIs</h4>

<p>With that history in mind, there are a few important things you should know in order to use the <code>.data()</code> and <code>jQuery.data()</code> APIs effectively. To give you a better sense of what's going on, the items are illustrated with some code. Assume that each code block runs independently of the others and that they all refer the following HTML:</p>

<div class="igBar"><span id="lhtml-21"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">HTML:</span><br/><div id="html-21">
<div class="html" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;"><span style="color: #000000;">&lt;div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">"novel"</span> data-novelist<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'{"firstname": "Jose", "lastname": "Saramago"}'</span><span style="color: #000000;">&gt;</span></span>Blindness<span style="color: #009900;"><span style="color: #000000;">&lt;/div&gt;</span></span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;"><span style="color: #000000;">&lt;div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">"poem"</span> data-poet<span style="color: #66cc66;">=</span><span style="color: #ff0000;">"Edna St. Vincent Millay"</span><span style="color: #000000;">&gt;</span></span>Sonnet 18<span style="color: #009900;"><span style="color: #000000;">&lt;/div&gt;</span></span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #009900;"><span style="color: #000000;">&lt;div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">"story"</span> data-story-writer<span style="color: #66cc66;">=</span><span style="color: #ff0000;">"Raymond Carver"</span><span style="color: #000000;">&gt;</span></span>A Small, Good Thing<span style="color: #009900;"><span style="color: #000000;">&lt;/div&gt;</span></span></div></li>
</ol></div>
</div></div><br/>

<p>Here are the rules of the road:</p>

<ol>
<li>
  <h5>Only the <code>.data()</code> API reads HTML5 <code>data-*</code> attributes, and it does so <em>once</em>.</h5>
 <p>The in-memory data object for an element is initialized from those <code>data-*</code> attributes the first time you call <code>.data()</code> for the element. Any subsequent changes to the attributes are ignored, since jQuery has already cached the data. </p>
<p><strong>Rule:</strong> If HTML5 <code>data-*</code> attributes change during program execution, use jQuery's <code>.attr()</code> method to get the current values.</p>
<div class="igBar"><span id="ljavascript-22"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-22">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> <a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=$.data"><span>$.<span style="color: #660066;">data</span></span></a><span style="color: #009900;">(</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">(</span><span style="color: #3366CC;">'poem'</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'poet'</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; undefined</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Edna St. Vincent Millay"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// Change the HTML5 data-poet attribute</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">$<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'data-poet'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Edmund Spenser'</span><span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Edna St. Vincent Millay"</span></div></li>
</ol></div>
</div></div><br/>
</li>


<li>
  <h5>The <code>.data()</code> API converts HTML5 <code>data-*</code> values to Javascript types whenever possible.</h5>
<p>That means sequences of digits or exponential-looking values like <code>"11E5"</code> are translated to a Javascript Number type, the string <code>"true"</code> becomes Boolean <code>true</code>, and a valid JSON string becomes a JavaScript object.</p>
<p><strong>Rule:</strong> To get HTML5 <code>data-*</code> attributes as strings without data conversion, use jQuery's <code>.attr()</code> method.</p>
<div class="igBar"><span id="ljavascript-23"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-23">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#novel'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'novelist'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; Object&gt; {"firstname": "Jose", "lastname": "Saramago"}</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#novel'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'data-novelist'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; '{"firstname": "Jose", "lastname": "Saramago"}'</span></div></li>
</ol></div>
</div></div><br/>
</li>

<li>
  <h5>The lower-level <code>jQuery.data()</code> API does not read HTML5 <code>data-*</code> attributes.</h5>
 <p>However, if the <code>.data()</code> API has been called already on that DOM element, <code>jQuery.data()</code> will "see" the values that it has already read from the <code>data-*</code> attributes. Conversely, if <code>jQuery.data()</code> sets a value with the same name as an HTML5 <code>data-*</code> attribute and <code>.data()</code> later reads them, the HTML5 attribute is <em>ignored</em>.</p>
<p><strong>Rule:</strong> To prevent confusion, do not use similar names for HTML5 <code>data-*</code> attributes and strictly internal data stored using <code>jQuery.data()</code> or <code>.data()</code> on the same elements.</p>
<div class="igBar"><span id="ljavascript-24"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-24">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// Before reading with .data()</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> <a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=$.data"><span>$.<span style="color: #660066;">data</span></span></a><span style="color: #009900;">(</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">(</span><span style="color: #3366CC;">'poem'</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'poet'</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; undefined</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Edna St. Vincent Millay"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// After reading with .data()</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> <a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=$.data"><span>$.<span style="color: #660066;">data</span></span></a><span style="color: #009900;">(</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">(</span><span style="color: #3366CC;">'poem'</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'poet'</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Edna St. Vincent Millay"</span></div></li>
</ol></div>
</div></div><br/>
</li>

<li>
  <h5><em>No</em> jQuery data API ever <em>changes</em> HTML5 <code>data-*</code> attributes.</h5>
<p> Most uses of <code>.data()</code> and <code>.removeData()</code> are still for the original purpose of associating data with DOM elements in memory. Updating DOM attributes each time data was changed would slow things down for no good reason. Also, it's not even possible to serialize all data types that might be attached to a DOM element, such as functions, references to other DOM elements, or custom JavaScript objects. </p>
<p><strong>Rule:</strong> To update or remove HTML5 <code>data-*</code> attributes, use jQuery's <code>.attr()</code> or <code>.removeAttr()</code> methods.</p>
<div class="igBar"><span id="ljavascript-25"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-25">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Edna St. Vincent Millay"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'data-poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Edna St. Vincent Millay"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// Change the HTML5 data-* attribute</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">$<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'data-poet'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'William Shakespeare'</span><span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Edna St. Vincent Millay"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'data-poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "William Shakespeare"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// Change .data('poet')</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;">$<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'poet'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Edmund Spenser'</span><span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Edmund Spenser"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#poem'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'data-poet'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "William Shakespeare"</span></div></li>
</ol></div>
</div></div><br/>
</li>


<li>
  <h5>All <code>data-*</code> names are stored in camelCase in the jQuery data object, using <a href="http://www.w3.org/TR/html5/elements.html#embedding-custom-non-visible-data-with-the-data-attributes">W3C rules</a>.</h5>
<p> So, <code>data-caMEL-case</code> becomes the <code>camelCase</code> property in the data object and should be accessed using <code>.data("camelCase")</code>. Because many people will use <code>.data("camel-case")</code> instead, we convert that to <code>camelCase</code> as well, but only if no data item named <code>camel-case</code> is found so it's faster to use the first form. If you get the entire data object using code like <code>data = jQuery.data(elem)</code>, you <em>must</em> use <code>data.camelCase</code> to access the data item.</p>
<p><strong>Rule:</strong> When accessing data taken from <code>data-*</code> attributes, and especially when accessing the data object directly, use the W3C camelCasing conventions.</p>
<div class="igBar"><span id="ljavascript-26"><a href="http://feeds.feedburner.com/LearningJquery">PLAIN TEXT</a></span></div><div class="syntax_hilite"><span class="langName">JavaScript:</span><br/><div id="javascript-26">
<div class="javascript" style="font-family: monospace;"><ol><li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// Not recommended:</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#story'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'STORY-writer'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Raymond Carver"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// Better:</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#story'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=data"><span>data</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'storyWriter'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Raymond Carver"</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// Broken:</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#story'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'dataStoryWriter'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; undefined</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"> </div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">// Better:</span></div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #003366; font-weight: bold;">console</span>.<span style="color: #660066;">log</span><span style="color: #009900;">(</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">'#story'</span><span style="color: #009900;">)</span>.<a href="http://feeds.feedburner.com/wp-content/themes/ljq/docs-1.7.php?fn=attr"><span>attr</span></a><span style="color: #009900;">(</span><span style="color: #3366CC;">'data-STORY-writer'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>;</div></li>
<li style="font-weight: normal; vertical-align: top; color: #ACAA9A;"><div style="background-color: transparent;"><span style="color: #006600; font-style: italic;">//&gt;&gt; "Raymond Carver"</span></div></li>
</ol></div>
</div></div><br/>
</li>
</ol>

<h4>Pick What You Like</h4>

<p>Over time, jQuery's <code>.data()</code> API has taken on more responsibilities than it originally had when it was just a way to associate in-memory data with DOM elements and prevent IE leakage. If you need only a simple way to read HTML5 <code>data-*</code> attributes as strings, then the <code>.attr()</code> method may be the best choice, even though the siren-song-name <code>.data()</code> may be telling you otherwise. Whether you use <code>.attr()</code> or <code>.data()</code>, they work consistently across browsers all the way back to IE6 — even if the browser doesn't support HTML5 — so just choose the API with the feature set that works best for your needs.</p><img height="1" src="http://feeds.feedburner.com/~r/LearningJquery/~4/o9n-sU05D_g" width="1"/></div>
    </content>
    <updated>2011-09-02T16:52:09Z</updated>
    <category term="Beginner"/>
    <category term="DOM Modification"/>
    <category term="Intermediate"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.learningjquery.com/2011/09/using-jquerys-data-apis</feedburner:origlink>
    <author>
      <name>Dave Methvin</name>
    </author>
    <source>
      <id>http://www.learningjquery.com</id>
      <link href="http://www.learningjquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/LearningJquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Tips, techniques, and tutorials for the jQuery JavaScript library</subtitle>
      <title>Learning jQuery</title>
      <updated>2012-09-12T07:14:20Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1467</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/FVr1CUh4eYc/" rel="alternate" type="text/html"/>
    <title>jQuery 1.6.3 Released</title>
    <summary>jQuery 1.6.3 is now out! This is the third minor release on top of jQuery 1.6 and lands a number of fixes for bugs, as listed below. As usual, we provide two copies of jQuery, one minified and one uncompressed (for debugging or reading). jQuery 1.6.3 Minified jQuery 1.6.3 Uncompressed You can help us by [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>jQuery 1.6.3 is now out! This is the third minor release on top of jQuery 1.6 and lands a number of fixes for bugs, as listed below.</p>
<p>As usual, we provide two copies of jQuery, one minified and one uncompressed (for debugging or reading).</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.6.3.min.js">jQuery 1.6.3 Minified</a></li>
<li><a href="http://code.jquery.com/jquery-1.6.3.js">jQuery 1.6.3 Uncompressed</a></li>
</ul>
<p>You can help us by dropping that code into your existing application and letting us know if anything no longer works. Please <a href="http://docs.jquery.com/How_to_Report_Bugs">file a bug</a> and be sure to mention that you’re testing against jQuery 1.6.3.</p>
<p>Many thanks to all the people who reported bugs, submitted patches, and otherwise helped with this release! We want to encourage everyone from the community to <a href="http://docs.jquery.com/Getting_Involved">get involved</a> in contributing back to jQuery core. We’ve set up a <a href="http://docs.jquery.com/Getting_Involved">full page</a> of information dedicated towards becoming more involved with the team. The team is here and ready to help you help us!</p>
<h2>Highlights</h2>
<p><strong>Fix an <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">XSS</a> attack vector:</strong> User ma.la <a href="http://bugs.jquery.com/ticket/9521">reported</a> a common pattern that many sites are using to select elements using <code>location.hash</code> that allows someone to inject script into the page. This practice seemed widespread enough that we decided to modify the selector recognition to prevent script injection for the most common case. Any string passed to <code>$()</code> cannot contain HTML tags (and thus no script) if it has a “#” character preceding them. See the ticket linked above for more information and a test case.</p>
<p><strong>No more animation <a href="http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/">“worm holes”</a>:</strong> We had high hopes for the browser’s <code>requestAnimationFrame</code> API when we added support into version 1.6. However, one of the highest-volume complaints we’ve received since then relates to the way <code>requestAnimationFrame</code> acts when a tab is not visible. All the animations initiated when the tab is invisible “stack” and are not executed until the tab is brought back into focus. Then they all animate at warp speed! We’ve removed support for this API (which has no impact on the way you call jQuery’s animation features) and plan to incorporate it into a future version of jQuery.</p>
<p><strong>Better handling of HTML5 data attribute names:</strong> The <code>$().data()</code> API serves double-duty, handling data for the internal use of jQuery and plugins in addition to reading initial values of HTML5 <code>data-</code> attributes. We’ve improved the ability to use HTML5 conventions such as converting <code>camel-case</code> to <code>camelCase</code> when needed. Remember, however, that the <code>$().data()</code> API only <em>reads</em> the HTML5 <code>data-</code> attributes initially, and does not keep subsequent data changes in sync with attributes for performance reasons. To update the actual attributes in the HTML markup, use <code>.attr()</code>.</p>
<h2>jQuery 1.6.3 Change Log</h2>
<p>The change log of the 1.6.3 release:</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9255">#9255</a>: jQuery.parseXML error handling does not work in webkit browsers</li>
<li><a href="http://bugs.jquery.com/ticket/9854">#9854</a>: Pass statusText through instead of “normalizing” it</li>
<li><a href="http://bugs.jquery.com/ticket/9887">#9887</a>: jQuery.ajaxSetup may cause unnecessary memory usage</li>
<li><a href="http://bugs.jquery.com/ticket/9970">#9970</a>: Typo in ajax.js: status should be jqXHR.status?</li>
<li><a href="http://bugs.jquery.com/ticket/10098">#10098</a>: Encode comment-like Accept headers to avoid mobile carrier mangling</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9630">#9630</a>: foo.contents().hasClass() returns incorrect value</li>
<li><a href="http://bugs.jquery.com/ticket/9699">#9699</a>: removeAttr(‘style’) does not consistently remove the style attribute in webkit</li>
<li><a href="http://bugs.jquery.com/ticket/9719">#9719</a>: removeAttr(‘disabled’) doesn’t change input’s color on IE6</li>
<li><a href="http://bugs.jquery.com/ticket/9979">#9979</a>: .prop(‘tabIndex’) returns inconsistent results for elements that have not yet set tabIndex</li>
<li><a href="http://bugs.jquery.com/ticket/9980">#9980</a>: Simplify the attr code by using getAttributeNode for everything in IE6/7</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9988">#9988</a>: Minimal License Header in compressed jQuery</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9521">#9521</a>: XSS with $(location.hash) and $(#) is needed?</li>
<li><a href="http://bugs.jquery.com/ticket/9897">#9897</a>: try-catch isPlainObject detection</li>
<li><a href="http://bugs.jquery.com/ticket/10076">#10076</a>: $.inArray crashes IE6 and Chrome if second argument is `null` or `undefined`</li>
</ul>
<h3>CSS</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6652">#6652</a>: Remove filter:alpha(opacity=100) after animation</li>
<li><a href="http://bugs.jquery.com/ticket/9572">#9572</a>: Support -ms-transform in .css() method</li>
<li><a href="http://bugs.jquery.com/ticket/10021">#10021</a>: Can’t add negative numbers using the relative-value syntax with .css() and .animate()</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8235">#8235</a>: jQuery.data throws a script error in certain circumstances</li>
<li><a href="http://bugs.jquery.com/ticket/9318">#9318</a>: HTML5 data attributes has strange behaviour with if attribute names contain numbers</li>
<li><a href="http://bugs.jquery.com/ticket/9413">#9413</a>: $.fn.removeData does not remove data with a dash in a name</li>
<li><a href="http://bugs.jquery.com/ticket/9779">#9779</a>: Allow non-null|undefined evaluation of data property values</li>
<li><a href="http://bugs.jquery.com/ticket/9794">#9794</a>: jQuery.fn.data() correctly handle access to arbitrary data property values</li>
<li><a href="http://bugs.jquery.com/ticket/10016">#10016</a>: Cannot retrieve “false-y” values under key names with dashes using jQuery.data method</li>
<li><a href="http://bugs.jquery.com/ticket/10080">#10080</a>: unload from frame’s window breaks in IE8</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10123">#10123</a>: .width() can return a float in Firefox 6</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9381">#9381</a>: Animations halt when the browser is out of focus due to requestAnimationFrame</li>
<li><a href="http://bugs.jquery.com/ticket/9678">#9678</a>: setInterval cleared by animation</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7071">#7071</a>: Accessing the ‘type’ property on VML elements fails on IE during submit special handler</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9587">#9587</a>: Cloning a div with an object causes error in IE8</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9634">#9634</a>: Visible “t” character in upper left corner during support.js init</li>
<li><a href="http://bugs.jquery.com/ticket/9823">#9823</a>: IE 8 crashes when using background-image on BODY in css</li>
<li><a href="http://bugs.jquery.com/ticket/9440">#9964</a>: test/support.js module strictEqual typo</li>
<li><a href="http://bugs.jquery.com/ticket/10029">#10029</a>: $.support.scriptEval removed, but still included in documentation</li>
</ul>
<p>Please do file a bug report with a test case as soon as possible if you find problems, as described above. Blog comments or Twitter aren’t helpful bug reports!</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/FVr1CUh4eYc" width="1"/></div>
    </content>
    <updated>2011-09-01T18:55:57Z</updated>
    <category term="jQuery"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/09/01/jquery-1-6-3-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-02T09:14:23Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.jquery.com/?p=1455</id>
    <link href="http://feedproxy.google.com/~r/jquery/~3/tJgpt-ZTxcw/" rel="alternate" type="text/html"/>
    <title>jQuery 1.6.3 RC1 Released</title>
    <summary>jQuery 1.6.3 is almost ready to roll! We need your help with this release candidate to be sure we’ve got everything right. Feel free to do your testing by including either one of these files (one minified and one uncompressed). Our preferred venue for test cases is jsFiddle; you can just use the “jQuery (edge)” [...]</summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>jQuery 1.6.3 is almost ready to roll! We need your help with this release candidate to be sure we’ve got everything right. </p>
<p>Feel free to do your testing by including either one of these files (one minified and one uncompressed). Our preferred venue for test cases is <a href="http://jsfiddle.net">jsFiddle</a>; you can just use the “jQuery (edge)” selection there. If you need to report a bug and cannot use jsFiddle, please use the uncompressed version with your test case.</p>
<ul>
<li><a href="http://code.jquery.com/jquery-1.6.3rc1.min.js">jQuery 1.6.3 RC1 Minified</a></li>
<li><a href="http://code.jquery.com/jquery-1.6.3rc1.js">jQuery 1.6.3 RC1 Uncompressed</a></li>
</ul>
<p>Please test this release with your most treasured code. If you find any important differences from 1.6.2, please <a href="http://bugs.jquery.com/">file a bug</a> as soon as possible and be sure to mention that you’re testing against jQuery 1.6.3 RC1. </p>
<p>If you’re making a quantum leap from a much older version of jQuery, it’s possible that the differences you find are due to documented behavior changes introduced in a major-point release. Check your code with the released 1.6.2 version first to be sure the problem only exists in 1.6.3 RC1.</p>
<h2>Highlights</h2>
<p><strong>Fix an <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">XSS</a> attack vector:</strong> User ma.la <a href="http://bugs.jquery.com/ticket/9521">reported</a> a common pattern that many sites are using to select elements using <code>location.hash</code> that allows someone to inject script into the page. This practice seemed widespread enough that we decided to modify the selector recognition to prevent script injection for the most common case. Any string passed to <code>$()</code> cannot contain HTML tags (and thus no script) if it has a “#” character preceding them. See the ticket linked above for more information and a test case.</p>
<p><strong>No more animation <a href="http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/">“worm holes”</a>:</strong> We had high hopes for the browser’s <code>requestAnimationFrame</code> API when we added support into version 1.6. However, one of the highest-volume complaints we’ve received since then relates to the way <code>requestAnimationFrame</code> acts when a tab is not visible. All the animations initiated when the tab is invisible “stack” and are not executed until the tab is brought back into focus. Then they all animate at warp speed! We’ve removed support for this API (which has no impact on the way you call jQuery’s animation features) and plan to incorporate it into a future version of jQuery.</p>
<p><strong>Better handling of HTML5 data attribute names:</strong> The <code>$().data()</code> API serves double-duty, handling data for the internal use of jQuery and plugins in addition to reading initial values of HTML5 <code>data-</code> attributes. We’ve improved the ability to use HTML5 conventions such as converting <code>camel-case</code> to <code>camelCase</code> when needed. Remember, however, that the <code>$().data()</code> API only <em>reads</em> the HTML5 <code>data-</code> attributes initially, and does not keep subsequent data changes in sync with attributes for performance reasons. To update the actual attributes in the HTML markup, use <code>.attr()</code>.</p>
<h2>jQuery 1.6.3 Change Log</h2>
<p>The current change log of the 1.6.3 release:</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9255">#9255</a>: jQuery.parseXML error handling does not work in webkit browsers</li>
<li><a href="http://bugs.jquery.com/ticket/9854">#9854</a>: Pass statusText through instead of “normalizing” it</li>
<li><a href="http://bugs.jquery.com/ticket/9887">#9887</a>: jQuery.ajaxSetup may cause unnecessary memory usage</li>
<li><a href="http://bugs.jquery.com/ticket/9970">#9970</a>: Typo in ajax.js: status should be jqXHR.status?</li>
<li><a href="http://bugs.jquery.com/ticket/10098">#10098</a>: Encode comment-like Accept headers to avoid mobile carrier mangling</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9630">#9630</a>: foo.contents().hasClass() returns incorrect value</li>
<li><a href="http://bugs.jquery.com/ticket/9699">#9699</a>: removeAttr(‘style’) does not consistently remove the style attribute in webkit</li>
<li><a href="http://bugs.jquery.com/ticket/9719">#9719</a>: removeAttr(‘disabled’) doesn’t change input’s color on IE6</li>
<li><a href="http://bugs.jquery.com/ticket/9979">#9979</a>: .prop(‘tabIndex’) returns inconsistent results for elements that have not yet set tabIndex</li>
<li><a href="http://bugs.jquery.com/ticket/9980">#9980</a>: Simplify the attr code by using getAttributeNode for everything in IE6/7</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9988">#9988</a>: Minimal License Header in compressed jQuery</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9521">#9521</a>: XSS with $(location.hash) and $(#) is needed?</li>
<li><a href="http://bugs.jquery.com/ticket/9897">#9897</a>: try-catch isPlainObject detection</li>
<li><a href="http://bugs.jquery.com/ticket/10076">#10076</a>: $.inArray crashes IE6 and Chrome if second argument is `null` or `undefined`</li>
</ul>
<h3>CSS</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/6652">#6652</a>: Remove filter:alpha(opacity=100) after animation</li>
<li><a href="http://bugs.jquery.com/ticket/9572">#9572</a>: Support -ms-transform in .css() method</li>
<li><a href="http://bugs.jquery.com/ticket/10021">#10021</a>: Can’t add negative numbers using the relative-value syntax with .css() and .animate()</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8235">#8235</a>: jQuery.data throws a script error in certain circumstances</li>
<li><a href="http://bugs.jquery.com/ticket/9318">#9318</a>: HTML5 data attributes has strange behaviour with if attribute names contain numbers</li>
<li><a href="http://bugs.jquery.com/ticket/9413">#9413</a>: $.fn.removeData does not remove data with a dash in a name</li>
<li><a href="http://bugs.jquery.com/ticket/9779">#9779</a>: Allow non-null|undefined evaluation of data property values</li>
<li><a href="http://bugs.jquery.com/ticket/9794">#9794</a>: jQuery.fn.data() correctly handle access to arbitrary data property values</li>
<li><a href="http://bugs.jquery.com/ticket/10016">#10016</a>: Cannot retrieve “false-y” values under key names with dashes using jQuery.data method</li>
<li><a href="http://bugs.jquery.com/ticket/10080">#10080</a>: unload from frame’s window breaks in IE8</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10123">#10123</a>: .width() can return a float in Firefox 6</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9381">#9381</a>: Animations halt when the browser is out of focus due to requestAnimationFrame</li>
<li><a href="http://bugs.jquery.com/ticket/9678">#9678</a>: setInterval cleared by animation</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7071">#7071</a>: Accessing the ‘type’ property on VML elements fails on IE during submit special handler</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9587">#9587</a>: Cloning a div with an object causes error in IE8</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9634">#9634</a>: Visible “t” character in upper left corner during support.js init</li>
<li><a href="http://bugs.jquery.com/ticket/9823">#9823</a>: IE 8 crashes when using background-image on BODY in css</li>
<li><a href="http://bugs.jquery.com/ticket/9440">#9964</a>: test/support.js module strictEqual typo</li>
<li><a href="http://bugs.jquery.com/ticket/10029">#10029</a>: $.support.scriptEval removed, but still included in documentation</li>
</ul>
<p>Please do file a bug report with a test case as soon as possible if you find problems, as described above. Blog comments or Twitter aren’t helpful bug reports!</p>
<img height="1" src="http://feeds.feedburner.com/~r/jquery/~4/tJgpt-ZTxcw" width="1"/></div>
    </content>
    <updated>2011-08-29T18:15:28Z</updated>
    <category term="Uncategorized"/><feedburner:origlink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://blog.jquery.com/2011/08/29/jquery-1-6-3-rc1-released/</feedburner:origlink>
    <author>
      <name>dmethvin</name>
    </author>
    <source>
      <id>http://blog.jquery.com</id>
      <link href="http://blog.jquery.com" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/jquery" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>New Wave Javascript</subtitle>
      <title>Official jQuery Blog</title>
      <updated>2011-11-01T19:14:27Z</updated>
    </source>
  </entry>
</feed>
