DOM-判断元素节点类型

http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object/27112297#27112297

 

判断节点类型:

 

<body>
    <div id="test">aaa</div>
    <!--这是一个注释节点-->
    <script>
        var isElement = function (el){
            return !!el && el.nodeType === 1;//注意这个return 和 !!el的判断
        }
        var a = {
           nodeType: 1
        }
        console.log(isElement(document.getElementById("test")));
        console.log(isElement(document.getElementById("test").nextSibling));
        console.log(isElement(a));
    </script>
</body>

更严谨的判断方法

<body>
    <div id="test">aaa</div>
    <!--这是一个注释节点-->
    <script>
        var testDiv = document.createElement('div');
        var isElement = function (obj) {
            if (obj && obj.nodeType === 1) {//先过滤最简单的
                if( window.Node && (obj instanceof Node )){ //如果是IE9,则判定其是否Node的实例
                    return true; //由于obj可能是来自另一个文档对象,因此不能轻易返回false
                }
                try {//最后以这种效率非常差但肯定可行的方案进行判定
                    testDiv.appendChild(obj);
                    testDiv.removeChild(obj);
                } catch (e) {
                    return false;
                }
                return true;
            }
            return false;
        }
        var a = {
           nodeType: 1
        }
        console.log(isElement(document.getElementById("test")));
        console.log(isElement(document.getElementById("test").nextSibling));
        console.log(isElement(a));
    </script>
</body>

 

posted @ 2015-08-01 15:32  darr  阅读(4986)  评论(0编辑  收藏  举报