Ponieważ jestem w stanie odpowiedzieć w komentarzu (zbyt niska karma chyba), tutaj jest pełna odpowiedź. Najszybszym sposobem jest łatwe rozwinięcie sprawdzania jQuery dla obsługi przeglądarki i zredukowanie stałych współczynników do minimum.
Jak widać również tu - http://jsperf.com/jquery-element-in-dom/28 - kod powinien wyglądać następująco:
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);
to semantycznie równoważne jQuery.contains (document.documentElement, elt [0]).
+1, która jest zgrabna :) –
robienie '$ foo.closest (document.documentElement)' jest szybsze (jeśli ktokolwiek dba o http://jsperf.com/jquery-element-in-dom) – urraka
@PerroAzul: Znalazłem _ znacznie szybszą alternatywę: http://jsperf.com/jquery-element-in-dom/2 – SLaks