답변:
이처럼 :
if (!jQuery.contains(document, $foo[0])) {
//Element is detached
}
요소의 부모 중 하나가 제거 된 경우에도 여전히 작동합니다 (이 경우 요소 자체에는 여전히 부모가 있음).
$.contains(document.documentElement, $foo.get(0))
가장 빠른 방법 인 것 같습니다 .
document.contains($foo[0])
방금 질문을 입력하면서 답변을 깨달았습니다.
$foo.parent()
$f00
DOM에서 제거 된 경우 $foo.parent().length === 0
. 그렇지 않으면 길이는 1 이상입니다.
[편집 : 제거 된 요소가 여전히 부모를 가질 수 있기 때문에 이것은 완전히 정확하지 않습니다. 예를 들어,를 제거해도 <ul>
각 하위 <li>
에는 여전히 부모가 있습니다. 대신 SLaks의 답변을 사용하십시오.
$foo
DOM에서 제거 되었는지 테스트 중 입니다. 성공적으로 제거되면 더 이상 상위 요소가 없습니다. 따라서 $foo.parent().length === 0
제거가 완료되었음을 의미합니다.
코멘트로 응답 할 수 없기 때문에 (너무 낮은 업장이라고 생각합니다) 여기 전체 답변이 있습니다. 가장 빠른 방법은 브라우저 지원을 위해 jQuery 검사를 쉽게 풀고 상수 요소를 최소로 줄이는 것입니다.
http://jsperf.com/jquery-element-in-dom/28- 여기에서도 볼 수 있듯이 코드는 다음과 같습니다.
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);
이것은 의미 적으로 jQuery.contains (document.documentElement, elt [0])와 동일합니다.
아마도 가장 성능이 좋은 방법은 다음과 같습니다.
document.contains(node); // boolean
이것은 jQuery 와도 작동합니다.
document.contains($element[0]); // var $element = $("#some-element")
document.contains(this[0]); // in contexts like $.each(), `this` is the jQ object
MDN 소스
노트 :
부모를 반복하는 대신 요소가 dom에서 분리 될 때 경계 0을 얻을 수 있습니다.
function isInDOM(element) {
var rect=element.getBoundingClientRect();
return (rect.top || rect.bottom || rect.height || rect.width)?true:false;
}
너비가 0 인 요소와 너비가 0 인 요소의 가장자리를 0에서 왼쪽으로 처리하려면 부모가 문서까지 반복하여 두 번 확인할 수 있습니다.
display: none
경계가없는 요소
왜 안돼 if( $('#foo').length === 0)...
?
$foo
하여 다시 쿼리하고 다시 쿼리가 요소와 일치하는지 확인하는 것은 많은 시나리오에서 문제에 대한 실질적인 해결책으로 보입니다. jQuery와 브라우저가 특정 선택기를 최적화하는 방법 (예 : ID)으로 인해 다른 솔루션보다 더 빠를 수도 있습니다 .
$foo.closest(document.documentElement)
이 더 빠릅니다 (누군가 jsperf.com/jquery-element-in-dom에 관심이있는 경우 )