code: function scrapeTabManagedSubtree(walker) {
          var tabManagedElement = walker.currentNode,
              childFocus = tabManagedElement._tabContainer.childFocus,
              elementsFound = [];
  
          if (!childFocus) {
              return [];
          }
  
          walker.currentNode = childFocus;
          function scrapeSubtree() {
              if (walker.currentNode._tabContainer) {
                  elementsFound = elementsFound.concat(scrapeTabManagedSubtree(walker));
              } else {
                  // A child focus can have tabIndex = -1, so check the tabIndex before marking it as valid
                  if (getTabIndex(walker.currentNode) >= 0) {
                      elementsFound.push(walker.currentNode);
                  }
                  if (walker.firstChild()) {
                      do {
                          scrapeSubtree();
                      } while (walker.nextSibling());
                      walker.parentNode();
                  }
              }
          }
          scrapeSubtree();
          walker.currentNode = tabManagedElement;
  
          return elementsFound;
      }
docs: We've got to manually scrape the results the walker generated, since the walker will have generated a fairly good representation of the tabbable tree, but won't have a perfect image. Trees like this cause a problem for the walker: [ tabContainer element ] [ element containing childFocus ] [ childFocus ] [ sibling of child focus that has tabIndex >= 0 ] We can't tell the tree walker to jump right to the childFocus, so it'll collect the childFocus but also that sibling element. We don't want that sibling element to appear in our version of the tabOrder, so scrapeTabManagedSubtree will take the pretty accurate representation we get from the TreeWalker, and do a little more pruning to give us only the nodes we're interested in.