Get the last leaf of a DOM tree (while considering text nodes)
I use this to simulate the (non-existing) :last-letter
CSS pseudoclass, e. g. to insert a tombstone at the end of an article:
CopyfindLastLeaf = ($container) -> $children = $container.children() if $children.length == 0 $container else $lastChild = $children.last() $lastContent = $container.contents().filter(-> # Only return nodes that are either elements or non-empty text nodes @nodeType == 1 || (@nodeType == 3 && _.strip(@nodeValue) != '') ).last() if $lastContent.get(0) == $lastChild.get(0) findLastLeaf($lastChild) else $container
Please note that you can't simply say $container.descendants.last()
or something similar, since jQuery is ignorant of text nodes.
Once an application no longer requires constant development, it needs periodic maintenance for stable and secure operation. makandra offers monthly maintenance contracts that let you focus on your business while we make sure the lights stay on.