Como no puedo responder como un comentario (supongo que el karma es demasiado bajo), aquí hay una respuesta completa. La forma más rápida es desenrollar fácilmente la comprobación de jQuery para el soporte del navegador y reducir al mínimo los factores constantes.
Como se ve también aquí: http://jsperf.com/jquery-element-in-dom/28 , el código se vería así:
var isElementInDOM = (function($) {
var docElt = document.documentElement, find,
contains = docElt.contains ?
function(elt) { return docElt.contains(elt); } :
docElt.compareDocumentPosition ?
function(elt) {
return docElt.compareDocumentPosition(elt) & 16;
} :
((find = function(elt) {
return elt && (elt == docElt || find(elt.parentNode));
}), function(elt) { return find(elt); });
return function(elt) {
return !!(elt && ((elt = elt.parent) == docElt || contains(elt)));
};
})(jQuery);
Esto es semánticamente equivalente a jQuery.contains (document.documentElement, elt [0]).
$foo.closest(document.documentElement)
es más rápido (si a alguien le importa jsperf.com/jquery-element-in-dom )