`
zhouyrt
  • 浏览: 1176585 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

判断元素是否为HTMLElement元素

阅读更多

我们经常使用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的情况,函数名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;
	}
}	

 

 

 

分享到:
评论

相关推荐

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

    在JavaScript中,我们经常需要判断一个对象是否是HTMLElement类型,这在处理DOM操作时尤为重要。HTMLElement是HTML元素的基类,表示所有HTML元素的抽象基类。为了确定一个对象是否属于这个类型,我们通常会检查其`...

    dom-contains:确定一个HTMLElement是否为或包含另一个HTMLElement

    确定一个HTMLElement是否为或包含另一个HTMLElement。 这是一个CommonJS的克隆 。 var contains = require ( 'dom-contains' ) ; 包含(元素,针) 返回一个布尔值。 element是否为needle或包含needle 。 元素 ...

    如何判断出一个js对象是否一个dom对象

    总结来说,通过判断JavaScript对象是否具有DOM元素的特定属性或是否为HTMLElement的实例,我们可以有效地判断该对象是否是DOM对象。需要注意的是,由于不同浏览器可能存在不同的实现差异,一个健壮的判断方法应当...

    JS公共小方法之判断对象是否为domElement的实例

    要判断一个对象是否为DOM元素的实例,我们可以编写一个函数,这个函数通过检查对象的特定属性或方法来进行判断。在提供的文档片段中,有一个名为`isDOMElement`的函数,它的作用就是判断传入的对象是否是DOM元素。 ...

    vue实现吸顶、锚点和滚动高亮按钮效果

    这种方法更直接,但同样需要监听滚动事件,根据元素的 top 值来判断是否达到吸顶条件。 接下来,我们谈谈锚点定位。锚点链接允许用户通过点击按钮直接跳转到页面的特定部分。在 Vue 中,可以监听点击事件,然后使用...

    ext核心api详解(2)

    3. `is(String/HTMLElement/Array el, String selector) : Boolean`:判断给定的元素或元素集合是否匹配`selector`。 4. `select(String selector, [Node root]) : Array`:在`root`节点下查找匹配`selector`的所有...

    webbrowser模拟点击按钮

    - `if (i.GetAttribute("name") == "login")`:判断元素的名称是否为 “login”,这里假设 “login” 是登录按钮的名字属性。 - `i.InvokeMember("click");`:如果匹配,则调用 `InvokeMember` 方法触发点击事件。...

    C#实现表单提交(1) - 真功夫

    3. **绑定事件处理器**:找到目标HTML元素后,可以使用`.NET`提供的事件绑定方法,如`HtmlElement.click`事件,或者使用更通用的`AttachEventHandler`方法来绑定事件处理器。 ### 示例代码分析 以HTML按钮点击事件...

    解决Firefox下不支持outerHTML问题代码分享

    `canHaveChildren`属性用于判断一个元素是否能够包含子元素,如果是不能包含子元素的元素类型(如`<img>`、`<input>`等),则返回`false`,否则返回`true`。 这样,即使在不支持`outerHTML`的浏览器中,我们也可以...

    检测本机QQ

    - **监听文档加载完成事件**:通过监听 `DocumentCompleted` 事件来确定网页是否完全加载完成。 ```csharp web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebCompleted); ``` ### 3. 解析...

    EXTJS总结.txt

    17.is 测试当前元素是否与传入的选择符相符一致。 复制代码 代码如下: var el = Ext.get('elId'); if (el.is('p.myCls')) { // 条件成立 } 18.findParent 定位于此节点,以此节点为起点,向外围搜索外层的父...

    javascript中onmouse事件在div中失效问题的解决方法

    接下来,文章说明了如何在Firefox中通过扩展HTMLElement原型定义contains方法来判断一个元素是否为另一个元素的子元素或后代。 最后,文章提供了一个名为hideMsgBox的函数,用于处理事件并执行相应操作(例如隐藏...

    js contains方法实现代码

    在IE浏览器中,HTMLElement原型提供了一个contains方法,允许开发者检查一个元素是否包含另一个元素。然而,这个方法并不是所有浏览器的标配。尤其是Firefox浏览器,它的早期版本并不支持contains方法。这导致了...

    JS判断浏览器类型与版本

    在JavaScript中,我们经常需要检测用户的浏览器类型及版本,以便为不同的浏览器提供兼容性的解决方案或者优化用户体验。这可以通过检查navigator对象的各种属性来实现。navigator对象是浏览器提供的一个全局对象,...

    读jQuery之六 缓存数据功能介绍

    - **jQuery.acceptData**:一个函数,用于判断指定元素是否能接受数据。 #### 4. jQuery.data()方法的使用 `jQuery.data()`方法提供了灵活的方式来操作缓存数据: - **读取数据**: - 传入一个参数,返回指定...

    C# webBrowser 自动表单提交问题 - 真功夫

    通过观察表单中的`<input>`元素可以看到,提交按钮设置了`tabindex`属性为6。因此,可以通过遍历所有元素,查找具有特定`tabindex`值的元素,并触发点击事件。 具体实现代码如下: ```csharp ...

    不用ajax实现点击文字即可编辑的方法

    3. 检测浏览器类型:通过isIE()函数判断当前浏览器是否为IE。因为在IE浏览器中,操作innerText和innerHTML的方式与非IE浏览器不同。根据浏览器类型,对HTMLElement的innerText属性进行相应的getter和setter定义,以...

    firefox浏览器不支持innerText的解决方法

    在提供的代码中,开发者通过检测浏览器类型(通过`navigator.userAgent`)来判断是否为Firefox,然后使用JavaScript的原型链(prototype)来添加`innerText`的getter和setter方法。这是通过`__defineGetter__`和`__...

Global site tag (gtag.js) - Google Analytics