要素が HMTLElement 要素であるかどうかを判断するには、多くの場合、nodeType==1 を使用します。ページ上の要素は、要素ノード、属性ノード、テキスト ノードなどを含むすべてのノードです。 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};
関数はHTMLElement(obj){
if(obj.nodeType){
obj.nodeType==1 を返します。
}
}
isHTMLElement(obj);//true
上記の isHTMLElement(obj) は true を返しますが、obj は明らかに HTML ノード要素ではありません。以下はオブジェクトの特性とtry-catch文により判定されます。
次のようにコードをコピーします。
関数はHTMLElement(obj){
var d = document.createElement("div");
試す{
d.appendChild(obj.cloneNode(true));
obj.nodeType==1?true:false を返します。
}キャッチ(e){
false を返します。
}
}
var obj1 = {nodeType:1};
var obj2 = document.createTextNode("hello");
var obj2 = document.createElement("p");
isHTMLElement(obj1);//false
isHTMLElement(obj2);//false
isHTMLElement(obj3);//true
ウィンドウとドキュメントには特別な処理が必要です。
次のようにコードをコピーします。
関数 isHtmlControl(obj) {
var d = document.createElement("div");
試す{
d.appendChild(obj.cloneNode(true));
obj.nodeType==1 を返しますか? true : false;
}キャッチ(e){
obj== ウィンドウを返します || obj== ドキュメント;
}
}