怎么判断元素是否为HTMLElement元素,本文通过对象特性及try-catch语句来判断。 我们经常使用nodeType==1判断元素是否是一个HMTLElement元素。页面上的元素都是节点(Node),有元素节点(Element Node)、属性节点(Attribute Node)、文本节点(Text Node)等。w3c nodeType 的定义如下 const unsigned short ELEMENT_NODE = 1;
但如果我们自定义的对象也包含nodeType属性呢?如 view sourceprint? 2 function isHTMLElement(obj){ 3 if(obj.nodeType){ 4 return obj.nodeType==1; 5 } 6 } 7 isHTMLElement(obj);//true view sourceprint? 02 var d = document.createElement("div"); 03 try{ 04 d.appendChild(obj.cloneNode(true)); 05 return obj.nodeType==1?true:false; 06 }catch(e){ 07 return false; 08 } 09 } 10 var obj1 = {nodeType:1}; 11 var obj2 = document.createTextNode("hello"); 12 var obj2 = document.createElement("p"); 13 isHTMLElement(obj1);//false 14 isHTMLElement(obj2);//false 15 isHTMLElement(obj3);//true view sourceprint? 02 03 var d = document.createElement("div"); 04 try{ 05 d.appendChild(obj.cloneNode(true)); 06 return obj.nodeType==1 ? true : false; 07 }catch(e){ 08 return obj==window || obj==document; 09 } 10 } |