我們經常使用nodeType==1判斷元素是否是一個HMTLElement元素。頁面上的元素都是節點(Node),有元素節點(Element Node)、屬性節點(Attribute Node)、文本節點(Text Node)等。w3c nodeType 的定義如下
const unsigned short ELEMENT_NODE = 1; 
const unsigned short ATTRIBUTE_NODE = 2; 
const unsigned short TEXT_NODE = 3; 
const unsigned short CDATA_SECTION_NODE = 4; 
const unsigned short ENTITY_REFERENCE_NODE = 5; 
const unsigned short ENTITY_NODE = 6; 
const unsigned short PROCESSING_INSTRUCTION_NODE = 7; 
const unsigned short 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;
但如果我們自定義的對象也包含nodeType屬性呢?如 
復制代碼 代碼如下:
var obj = {nodeType:1}; 
function isHTMLElement(obj){ 
    if(obj.nodeType){ 
        return obj.nodeType==1; 
    } 
} 
isHTMLElement(obj);//true 
復制代碼 代碼如下:
function isHTMLElement(obj){ 
    var d = document.createElement("div"); 
    try{ 
        d.appendChild(obj.cloneNode(true)); 
        return obj.nodeType==1?true:false; 
    }catch(e){ 
        return false; 
    } 
} 
var obj1 = {nodeType:1}; 
var obj2 = document.createTextNode("hello"); 
var obj2 = document.createElement("p"); 
isHTMLElement(obj1);//false 
isHTMLElement(obj2);//false 
isHTMLElement(obj3);//true 
復制代碼 代碼如下:
function isHtmlControl(obj) {  
    var d = document.createElement("div"); 
    try{ 
        d.appendChild(obj.cloneNode(true)); 
        return obj.nodeType==1 ? true : false; 
    }catch(e){ 
        return obj==window || obj==document; 
    } 
}  
新聞熱點
疑難解答
圖片精選