I know that not all jQuery functions can be chained together. Is there a rule of thumb on this. When can we not chain 2 functions together.
You can't chain a function that returns something other than a jQuery object. For example, attr()
with one parameter to get the value of an attribute.
if in the plugin they do:
return this; //<--jquery object
at the end then u can change it with other plugins :-)
You can chain when the function returns a "jQuery object".
For example, .css(property, value) can be chained, as the doc says it Returns jQuery:
while .height() cannot, because it returns an integer.
Typically, the functions that returns "jQuery objects" are those which typically would not "return a value", e.g. setter methods (.css(prop, val)
, .addClass()
), event binders (.click(handler)
), etc.
(Of course traverse methods (.parent()
, .find()
, etc.) can also be chained but the returned object will be different from the input.)
The way to distinguish is that functions which have side effects typically return jquery and can be chained where as functions with an actual return (like .text()
) cannot.