如何判断元素是否为HTMLElement元素

时间:2024-04-18 10:15:27 

我们经常使用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


以上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还要特别处理下


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;
    }

标签:HTMLElement
0
投稿

猜你喜欢

  • 使用Python读写多个sheet文件

    2022-10-23 18:39:40
  • Python 高级变量之字典和字符串详解

    2021-11-16 19:36:35
  • python OpenCV学习笔记

    2022-12-19 05:39:11
  • Web 2.0 框架发布

    2008-03-25 09:40:00
  • 将tf.batch_matmul替换成tf.matmul的实现

    2021-03-25 03:35:43
  • Python+PyQt5实现开发Memcached客户端

    2022-04-13 13:17:48
  • Python编程实现数学运算求一元二次方程的实根算法示例

    2023-08-08 05:38:40
  • asp 页面允许CACHE的方法

    2011-02-16 11:20:00
  • Django通过设置CORS解决跨域问题

    2023-05-22 14:18:41
  • mysql下mysql-udf-http效率测试小记

    2024-01-16 15:14:21
  • 关于utf-8格式中截取中英文字符串长度无效的问题

    2008-11-25 14:00:00
  • 监测站点使用多少session和application的asp程序

    2007-09-12 19:40:00
  • 谈一谈基于python的面向对象编程基础

    2021-09-09 11:04:39
  • Python常用标准库详解(pickle序列化和JSON序列化)

    2022-04-08 12:50:56
  • 网页新窗口打开好不好,数据说话

    2008-05-31 17:01:00
  • MySQL的主从复制原理详细分析

    2024-01-23 13:14:44
  • Django实战之用户认证(初始配置)

    2022-08-17 22:15:02
  • Python的三种主要模块介绍

    2023-10-15 23:16:26
  • SpringBoot整合Mysql和Redis的详细过程

    2024-01-27 02:18:01
  • matplotlib基本图形绘制操作实例

    2023-07-14 18:18:01
  • asp之家 网络编程 m.aspxhome.com