jQuery.quickEach
With jQuery, when you need to iterate all elements with a specific class for example, you use the each()
method and inside the callback function you must convert the DOM element you receive as this
to a jQuery object in order to access it's jQuery specific methods: $(this)
This is not such a big issue but if you have a lot of items and/or do this often, then times ads up. It would be a blast to have the this
object directly as a jQuery instance. So here's a $ little plugin that does exactly that
Source website:
http://jsperf.com/jquery-each-vs-quickeach
The code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | jQuery.fn.quickEach = (function() { var jq = jQuery([1]); return function(c) { var i = -1, el, len = this.length; try { while (++i < len && (el = jq[0] = this[i]) && c.call(jq, i, el) !== false); } catch (e) { delete jq[0]; throw e; } delete jq[0]; return this; }; }()); |
If you run the test on that page, on most browsers you'll see that quickEach() is about 80% faster than native each()
For Javascript devs
If you write Javascript apps you may want to dynamically add some HTML here and there and having HTML strings that need concatenation with different variables is bad and ugly at the same time. So here is a little nugget you might find useful.
1 2 3 4 5 | // standard style x = '<div class="' + classnames + '" rel="' + somevar + '" id="' + othervar + '">' + content + '</div>'; // html tag style x = htmlTag('div', {class:classname, rel:somevar, id:othervar}, content); |
Usage
htmlTag(tagName [, attributes [, content]])
or
htmlTag(tagName [, content [, attributes]])
The function can be called with one, two or three arguments. Beside the first one which is the name of the tag (string), the other two are optional and can be placed in whatever order you like.
For img tags, the content argument is set as src attribute or as value attribute for input tags if the attributes argument doesn't specify otherwise
attributes argument must be an object with key:value pairs and will be expanded as attributes of the tag
content argument is a string or number
1 2 3 4 5 6 7 8 9 10 11 12 13 | var classname = 'test', somevar = 2, id = 'mydiv', content = 'hello'; htmlTag('div', {class:classname, rel:somevar, id:othervar}, content); htmlTag('div', content, {class:classname, rel:somevar, id:othervar}); // will both return <div class='test' rel='2' id='mydiv'>hello</div> htmlTag('img', content) // <img src='hello' /> htmlTag('img', {src:'myImage.jpg'}, content) // <img src='myImage.jpg' /> content is discarded and attributes src is used as source htmlTag('input', {type:'text', name:id}, content) // <input type="text" name="mydiv" value="hello" /> |
The code
1 2 3 4 5 6 7 8 9 10 11 | function htmlTag(type) { var r="< "+type,o={},v='',x=0,a=arguments; a.length==3&&(((x=typeof a[1]=='object')||1)&&((o=a[-~!x]||{})&&(v=a[-~x]||'')))||a.length==2&&(typeof a[1]=='object'&&(o=a[1]||{})||(v=a[1]||'')); for(var i in o)r+=" "+i+"='"+o[i]+"'"; (type=='img'||type=='br'||type=='input')&&((!o.src&&v)&&((type=='img'&&(r+=" src='"+v+"' />"))||(type=='input'&&(r+=" value='"+v+"' />")))||(r+=' />'))||(r+=">"+v+"< "+"/"+type+">"); return r; } function queryTag(type) { return $(htmlTag.apply(this, arguments)) } |
queryTag function just wraps the newly created html in a jQuery object so you can have something like this
1 2 3 4 5 | $("#menu").append( queryTag('div', {class:'menuItem'}, 'Click me').click(function() { alert('clicked'); }) ) |
Delete old snapshots from Alfresco
If you're an Alfresco user, you may have noticed that it creates a snapshot of the store every time you publish something in the staging sandbox. In time this ads up to a lot of MB. If you wish to delete old snapshots of your store, here's the way to do it with version 2.2+ of Alfresco using the AVM Console
First, open up the console at http://host:port/alfresco/faces/jsp/admin/avm-console.jsp
In the command line box, write
lsver, mystore
(where mystore is the name of your store)
This command will list all the snapshots. Now, you can remove individual snapshots by their id with
rmver, mystore, version
or remove a bunch of snapshots between two dates with
rmvers, mystore, 2010-06-25T10:43:06.214Z, 2010-12-09T12:30:26.769Z
The dates you can get from the list of snapshots. The documentation says that the date must be in ISO 8601 but I got an error trying to copy-paste the date from the list with the timezone at the end (+01:00) so I replaced that with Z and worked just fine.