2011-04-13 17 views
5

Bir öğe DOM'dan removeChild() kullanılarak kaldırıldığında, öğeye yapılan referans hala var, ancak öğe DOM'de artık yok.
Bir HTML öğesine (veya ebeveynlerine) hala bir belgeye eklenip eklenmediğini nasıl öğrenebilirim?HTML öğesi bir belgeye eklenmiş

cevap

5

: Ben sadece olsa Opera test

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <title></title> 
     <script> 
      function contains(parent, descendant) { 
       return parent == descendant || Boolean(parent.compareDocumentPosition(descendant) & 16); 
      } 
      window.addEventListener("DOMContentLoaded", function() { 
       var p = document.getElementById("test"); 
       //document.body.removeChild(p); 
       alert(contains(document, p)); 
      }, false); 
     </script> 
    </head> 
    <body> 
     <p id="test">test</p> 
    </body> 
</html> 

.

Bu sayfada da alternatifler var.

if(document.contains(yourElement)) { 
    // Yep, it's attached. 
} 

Uyumluluk: IE5 +

+0

@ 0x89 Alternatif bir adres bulundu ve bağlantıyı düzeltildi. Raporlama için teşekkürler. – Shadow2531

+0

16'nın, https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition adresinde açıklandığı gibi sabit bir değişkeni 'Node.DOCUMENT_POSITION_CONTAINED_BY' olduğunu merak eden herkes için. Ayrıca bu yöntem IE 8 ve daha düşük seviyelerde desteklenmemektedir. –

6

Belgeye doğrudan bağlıysa, parentNode özelliğini kontrol edin. Böyle bir ana öğe yoksa ve ana öğe için başka bir başvuru yoksa, null.

Sonraki kod, kullanımını gösterir, null, [Object HTMLBodyElement] ve null'u yazdırır. Bir ana öğe kaldırılması durumunda

var elm = document.createElement("p"); 
alert(elm.parentNode); 

document.body.appendChild(elm); 
alert(elm.parentNode); 

elm.parentNode.removeChild(elm); 
alert(elm.parentNode); 

Not yine bu sadece removeChild kullanılarak kaldırılmıştır elemanları için de geçerli olduğunu, bu ana öğenin üzerine parentNode özelliğini kontrol etmesi gerekir. Bir öğenin gerçekten bir belgenin parçası olup olmadığını öğrenmek için, en üstteki üst öğenin document olup olmadığını kontrol etmeniz gerekir.

function element_is_part_of_document(element) { 
    /* as long as the element is not document, and there is a parent element */ 
    while (element != document && element.parentNode) { 
     /* jump to the parent element */ 
     element = element.parentNode; 
    } 
    /* at this stage, the parent is found. If null, the uppermost parent element */ 
    /* is not document, and therefore the element is not part of the document */ 
    return element == document; 
} 
+3

bir unsur değil belgeye, başka elemana bağlıysa, bu söyleyecektir – Quentin

+1

@David: Doğru, ama cevap bağlamında, bir sorun gibi görünmüyor. Ben yanıtı geliştirmeye devam ediyorum;) – Lekensteyn

+0

Quentin, soru "bir düğüm veya ebeveynleri" diyor, bu yüzden Lekensteyn'in cevabı doğru –

10

Belgeye ulaşana veya düğümler tükenene kadar öğenin üst düğümünü kontrol etmeye devam edin. http://code.google.com/p/doctype-mirror/wiki/ArticleNodeContains itibaren

function is_element_in_document (element) { 
    if (element === document) { 
     return true; 
    } 
    element = element.parentNode; 
    if (element) { 
     return is_element_in_document (element); 
    } 
    return false; 
} 
İlgili konular