Пока что есть такое:
function isDOMElement(target) {
try {
target.parentNode.insertBefore(target, target);
} catch (e) {
try {
var parent = document.createDocumentFragment();
parent.appendChild(target);
} catch (e) {
return false;
}
parent.removeChild(target);
return true;
}
return true;
}
var elem1 = document.createElement("A");
var elem2 = document.documentElement;
var elem3 = {};
alert( [isDOMElement(elem1), isDOMElement(elem2), isDOMElement(elem3)] ); // true,true,false
Можно ли как-то проще?
Ещё кроссбраузерность под вопросом, у меня в опере true, true, false
upd: разумеется, важно никак не менять структуру DOM, отсюда фокусы с insertBefore и appendChild/removeChild