isInDocument (v2)

Revision 2 of this benchmark created by Andrew Desmarais on


Setup

window.elementWithShadowInDom = document.createElement('div');
  window.elementWithShadowInDom.attachShadow({mode :'open'});
  window.childElementInsideShadowInDom = document.createElement('div');
  window.elementWithShadowInDom.shadowRoot.appendChild(window.childElementInsideShadowInDom);
  document.body.appendChild(window.elementWithShadowInDom);
  
  window.elementWithShadowNOTDom = document.createElement('div');
  window.elementWithShadowNOTDom.attachShadow({mode :'open'});
  window.childElementInsideShadowNOTDom = document.createElement('div');
  elementWithShadowNOTDom.shadowRoot.appendChild(window.childElementInsideShadowNOTDom);
  
  window.elementInDom = document.createElement('div');
  window.elementInDom.attachShadow({mode :'open'});
  window.childElementInDom = document.createElement('div');
  window.elementInDom.shadowRoot.appendChild(window.childElementInDom);
  document.body.appendChild(window.elementInDom);
  
  window.elementNOTDom = document.createElement('div');
  window.elementNOTDom.attachShadow({mode :'open'});
  window.childElementNOTDom = document.createElement('div');
  window.elementNOTDom.shadowRoot.appendChild(window.childElementNOTDom);
  
  window.isInDocument = function(element) {
      if(document.body.contains(element)) {
          return true;
      }
      let currentElement = element;
      while(currentElement && currentElement.parentNode) {
          if(currentElement.parentNode === document) {
              return true;
          } else if(DocumentFragment && currentElement.parentNode instanceof DocumentFragment) {
              currentElement = currentElement.parentNode.host;
          } else {
              currentElement = currentElement.parentNode;
          }
      }
      return false;
  }

Test runner

Ready to run.

Testing in
TestOps/sec
Shadow DOM element is in DOM
window.isInDocument(window.childElementInsideShadowInDom);
ready
Regular DOM element NOT in DOM
window.isInDocument(window.childElementNOTDom);
ready
Shadow DOM element not in DOM
window.isInDocument(window.childElementInsideShadowNOTDom);
ready
Regular DOM element in DOM
window.isInDocument(window.childElementInDom);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 2: published by Andrew Desmarais on