Freqüentemente usamos nodeType==1 para determinar se um elemento é um elemento HTMLEment. Os elementos na página são todos nós, incluindo Nó de Elemento, Nó de Atributo, Nó de Texto, etc. w3c nodeType é definido da seguinte forma
const não assinado curto ELEMENT_NODE = 1;
const não assinado curto ATTRIBUTE_NODE = 2;
const não assinado curto TEXT_NODE = 3;
const não assinado curto CDATA_SECTION_NODE = 4;
const não assinado curto ENTITY_REFERENCE_NODE = 5;
const não assinado curto ENTITY_NODE = 6;
const não assinado curto PROCESSING_INSTRUCTION_NODE = 7;
const não assinado curto COMMENT_NODE = 8;
const não assinado curto DOCUMENT_NODE = 9;
const não assinado curto DOCUMENT_TYPE_NODE = 10;
const não assinado curto DOCUMENT_FRAGMENT_NODE = 11;
const não assinado curto NOTATION_NODE = 12;
Mas e se nosso objeto personalizado também contiver o atributo nodeType? como
Copie o código do código da seguinte forma:
var obj = {nodeType:1};
função éHTMLElement(obj){
if(obj.nodeType){
retornar obj.nodeType==1;
}
}
isHTMLElement(obj); //true
O isHTMLElement(obj) acima retorna verdadeiro, mas obj obviamente não é um elemento de nó HTML. O seguinte é julgado pelas características do objeto e pelas instruções try-catch.
Copie o código do código da seguinte forma:
função éHTMLElement(obj){
var d = document.createElement("div");
tentar{
d.appendChild(obj.cloneNode(true));
retornar obj.nodeType==1?true:false;
}pegar(e){
retornar falso;
}
}
var obj1 = {nodeType:1};
var obj2 = document.createTextNode("olá");
var obj2 = document.createElement("p");
isHTMLElement(obj1); //falso
isHTMLElement(obj2); //falso
isHTMLElement(obj3); //true
É necessário tratamento especial para janelas e documentos.
Copie o código do código da seguinte forma:
função isHtmlControl(obj) {
var d = document.createElement("div");
tentar{
d.appendChild(obj.cloneNode(true));
retornar obj.nodeType==1 ? verdadeiro: falso;
}pegar(e){
return obj==janela || obj==documento;
}
}