A menudo usamos nodeType==1 para determinar si un elemento es un elemento HMTLElement. Los elementos de la página son todos nodos, incluido el nodo de elemento, el nodo de atributo, el nodo de texto, etc. El tipo de nodo w3c se define de la siguiente manera
const sin firmar ELEMENT_NODE corto = 1;
const sin firmar corto ATTRIBUTE_NODE = 2;
const sin firmar corto TEXT_NODE = 3;
const unsigned short CDATA_SECTION_NODE = 4;
const sin firmar corto ENTITY_REFERENCE_NODE = 5;
const sin firmar corto ENTITY_NODE = 6;
const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
const sin firmar corto COMMENT_NODE = 8;
const unsigned short DOCUMENT_NODE = 9;
const unsigned short DOCUMENT_TYPE_NODE = 10;
const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
const unsigned short NOTATION_NODE = 12;
Pero, ¿qué pasa si nuestro objeto personalizado también contiene el atributo nodeType? como
Copie el código de código de la siguiente manera:
var obj = {tipo de nodo:1};
la función esHTMLElement(obj){
si(obj.tipodenodo){
devolver obj.nodeType==1;
}
}
isHTMLElement(obj);//verdadero
Lo anterior isHTMLElement(obj) devuelve verdadero, pero obj obviamente no es un elemento de nodo HTML. Lo siguiente se juzga por las características del objeto y las declaraciones try-catch.
Copie el código de código de la siguiente manera:
la función esHTMLElement(obj){
var d = document.createElement("div");
intentar{
d.appendChild(obj.cloneNode(verdadero));
return obj.nodeType==1?true:false;
}captura(e){
devolver falso;
}
}
var obj1 = {tipo de nodo:1};
var obj2 = document.createTextNode("hola");
var obj2 = document.createElement("p");
isHTMLElement(obj1);//falso
isHTMLElement(obj2);//falso
isHTMLElement(obj3);//verdadero
Se requiere un tratamiento especial para ventana y documento.
Copie el código de código de la siguiente manera:
función esHtmlControl(obj) {
var d = document.createElement("div");
intentar{
d.appendChild(obj.cloneNode(verdadero));
devolver obj.nodeType==1? verdadero: falso;
}captura(e){
devolver obj==ventana || obj==documento;
}
}