Toutes les solutions ci-dessus et ci-dessous (la mienne y compris) souffrent de la possibilité d'être incorrect, en particulier sur IE, il est tout à fait possible de (re)définir certains objets, méthodes et propriétés pour imiter un nœud DOM rendu le test invalide.
Donc j'ai utiliser le duck-typing-style de test: j'ai tester spécifiquement pour les choses que j'utilise. Par exemple, si je veux cloner un nœud je test comme ceci:
if(typeof node == "object" && "nodeType" in node &&
node.nodeType === 1 && node.cloneNode){
// most probably this is a DOM node, we can clone it safely
clonedNode = node.cloneNode(false);
}
Fondamentalement, c'est un peu sanity check + le test direct pour une méthode (ou une propriété) j'ai l'intention d'utiliser.
D'ailleurs le test ci-dessus est un bon test pour les nœuds DOM sur tous les navigateurs. Mais si vous voulez être sur le côté sûr, toujours vérifier la présence de méthodes et de propriétés et de vérifier leurs types.
EDIT: IE utilise les objets ActiveX pour représenter les nœuds, de sorte que leurs propriétés ne se comportent pas comme véritable objet JavaScript, par exemple:
console.log(typeof node.cloneNode); // object
console.log(node.cloneNode instanceof Function); // false
alors qu'il devrait revenir "fonction" et true
respectivement. Le seul moyen de méthodes de test est de voir si le sont définies.