The two functions mentioned here, chainify (https://gist.github.com/gists/1466219) and propertize (https://gist.github.com/1466253) work fine on their own but best when used together.
When provided with a constructor such as Element
, Node
, CSSStyleDeclaration
, etc, the function will run through every property. If the property is a function, it will be wrapped in another function which will ensure that the return value is the original object.
This means that you can use the syntax
document.createElement('a')
.setAttribute('data-monkeys', '∞')
.addEventListener('click', function(){ alert('Urk! Alert!')}, false)
Similar to the chainify function, this takes a constructor as its argument. It adds the method .prop to everything which will set the properties provided either as an object or as a propertyName and propertyValue then return the original object to ensure the outcome is still chainable.
myElement
.prop({
'href': 'http://140byt.es/',
'title': 'tiny awsm'
})
.prop('innerHTML', '140byt.es');
When the two are combined, you have a completely chainable DOM manipulation tool.
The idea for the .prop function came from Lea Verou's Chainvas. This should be mostly compatible with the syntax (although possibly less robust). You can do the same chainify/propertize on any of the standard constructors - Element
, Node
, CSSStyleDeclaration
, DOMTokenList
, CanvasRenderingContext2D
to make any API chainable.
@tjbenton awesome! use codeblocks...
@thingsinjars, need update of the gist because it is 2015 now :)
Based on above
propertize - 123 bytes
chainify - 111 bytes
Combined propertize + chainify - 200 bytes - test pass!
test pass