兼容IE
1.判断元素节点
<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"))); //true console.log(isElement(document.getElementById("test").nextSibling));//false console.log(isElement(a));//false </script>
</body>
2.判断XML文档类型
<body> <script> var isXML = function(doc) { return doc.createElement("p").nodeName !== doc.createElement("P").nodeName; }
console.log(isXML(document)) //false </script> </body>
3.判断HTML文档类型
<body> <script> var isHTML = function(doc) { return doc.createElement("p").nodeName == doc.createElement("P").nodeName; } console.log(isHTML(document)) //true </script> </body>
4.判断两种关系的元素节点
<body> <div id="p-node"> <div id="c-node">子节点内容</div> </div> <script> function fixContains(a, b) { try { while ((b = b.parentNode)){ if (b === a){ return true; } } return false; } catch (e) { return false; } } var pNode = document.getElementById("p-node"); var cNode = document.getElementById("c-node").childNodes[0]; alert(fixContains(pNode, cNode)); //true
//alert(fixContains(document, cNode)); //true </script> </body>