锁定老帖子 主题:判断元素是否为HTMLElement元素
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-08
最后修改:2010-04-30
我们经常使用nodeType==1判断元素是否是一个HMTLElement元素。页面上的元素都是节点(Node),有元素节点(Element Node)、属性节点(Attribute Node)、文本节点(Text Node)等。w3c nodeType 的定义如下:
const unsigned short ELEMENT_NODE = 1;
但如果我们自定义的对象也包含nodeType属性呢?如下:
var obj = {nodeType:1}; function isHTMLElement(obj){ if(obj.nodeType){ return obj.nodeType==1; } } isHTMLElement(obj);//true
以上isHTMLElement(obj)返回true,但obj明显不是一个HTML节点元素。下面通过对象特性及try-catch语句来判断。
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 增加个函数判断window和document的情况,函数名isHTMLControl
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; } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 3803 次