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
at the end of an article:
findLastLeaf = ($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.
Flaky tests are tests that sometimes fail for no obvious reason. They are the plague of many end-to-end (E2E) test suites that automate the browser through tools like Capybara and Selenium.
Join our free training event and learn to fix any flaky test suite, even in large legacy applications.