Cuando se elimina un elemento del DOM usando removeChild()
, la referencia al elemento aún existe pero el elemento ya no está en el DOM.
¿Cómo saber si un elemento HTML (o sus padres) todavía está adjunto a un documento?El elemento HTML está adjunto a un documento
Respuesta
De http://code.google.com/p/doctype-mirror/wiki/ArticleNodeContains:
<!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>
sólo probado en Opera sin embargo.
También hay alternativas en esa página.
Compruebe si su propiedad parentNode
está directamente adjunta al documento. Es null
si no hay tal elemento padre y de lo contrario una referencia al elemento padre. El siguiente código ilustra su uso, imprime null
, [Object HTMLBodyElement]
y null
.
var elm = document.createElement("p");
alert(elm.parentNode);
document.body.appendChild(elm);
alert(elm.parentNode);
elm.parentNode.removeChild(elm);
alert(elm.parentNode);
Nota vez más que esto sólo se aplica a los elementos que se han eliminado utilizando removeChild
, si se ha eliminado un elemento padre, que tendría que comprobar la propiedad parentNode
en ese elemento padre.
Para saber si un elemento es realmente parte de un documento, que tendría que comprobar si el elemento padre superior es document
.
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;
}
Esto le dirá si un elemento está unido a otro elemento, pero no en el documento. – Quentin
@David: Es cierto, pero en el contexto de la respuesta, no parece un problema. Sigo mejorando la respuesta;) – Lekensteyn
Quentin, la pregunta dice "un nodo o sus padres", por lo que la respuesta de Lekensteyn es correcta –
Siga comprobando el parentNode del elemento hasta que llegue al documento o se quede sin nodos.
function is_element_in_document (element) {
if (element === document) {
return true;
}
element = element.parentNode;
if (element) {
return is_element_in_document (element);
}
return false;
}
Node.prototype.contains()
es la respuesta:
if(document.contains(yourElement)) {
// Yep, it's attached.
}
Compatibilidad: IE5 +
- 1. Chrome está malinterpretando un archivo adjunto como documento
- 2. ¿Documento HTML a PDF?
- 3. ¿Eliminar el html adjunto usando jQuery?
- 4. HTML en el archivo adjunto iCal
- 5. ¿Cómo agrego un elemento XElement a un documento, evitando el error de "documento estructurado incorrectamente"?
- 6. ¿Cómo enlazar a un javascript gzip en un documento html?
- 7. Microdatos ID de elemento para identificar elementos dispersos en un documento HTML/tablas HTML
- 8. ¿Cómo puedo cargar un archivo adjunto a un documento en CouchDB usando ibrowse?
- 9. ¿Se pueden aplicar selectores jQuery a un elemento en lugar de a todo el documento?
- 10. ¿Cómo insertar un elemento en la posición seleccionada en el documento HTML?
- 11. Java: crea un elemento DOM a partir del elemento, no el documento
- 12. está utilizando el documento de Javascript listo dos veces en un documento ¿está bien?
- 13. Cómo aplicar la fuente global a todo el documento HTML
- 14. Enlace de código HTML dentro de un correo electrónico a un archivo adjunto de correo electrónico
- 15. ¿Cómo comprobar si un documento SVG incrustado está cargado en una página html?
- 16. Inserción elemento de un documento utilizando Jsoup
- 17. ¿Cómo programáticamente inspeccionar un documento HTML
- 18. Obtiene documento objeto de un elemento secundario
- 19. Cómo desvanecerse en el HTML adjunto con jQuery?
- 20. ¿Cómo funciona el análisis de un documento HTML/XML?
- 21. Roslyn Agregar un documento a un proyecto
- 22. Reemplazar todo el documento HTML en contexto
- 23. elemento siguiente en todo el documento * * después de cierto elemento
- 24. SharePoint: cómo agregar un archivo adjunto a un elemento de la lista de forma programática?
- 25. Eliminar texto del documento HTML con Ruby
- 26. Mongoose no está actualizando el documento incrustado
- 27. Agregar un archivo adjunto a .NET Email
- 28. atributo personalizado en el elemento HTML
- 29. Cómo mover el elemento HTML
- 30. ¿Qué tipo de documento HTML?
@ 0x89 Se encontró una dirección alternativa y se corrigió el enlace. Gracias por informar – Shadow2531
Para cualquiera que tenga curiosidad sobre lo que representa el 16 es una variable constante 'Node.DOCUMENT_POSITION_CONTAINED_BY' como se describe en https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition. Además, este método no es compatible con IE 8 y versiones anteriores. –