Проверка того, является ли объект DOM-элементом

Передача элементов DOM в WebWorkers становится сложной, поскольку все ссылки на DOM "потеряны". Мне нужно проверить объекты, которые передаются до отправки сообщения WebWorker.

Каков самый быстрый способ проверить, является ли экземпляр объекта DOM-элементом OR/AND частью дерева DOM, OR имеет "дочерние", которые содержат ссылки на дерево DOM?

часть использования:

var a = new SharedWorker("bigdatahandler.js");   
a.postMessage(s);

s //<--should not be a DOM object

Ответ 1

Чтобы проверить, является ли это элементом, я думаю, obj.nodeName - ваш лучший выбор.

var a = new SharedWorker("bigdatahandler.js");   
if (!s.nodeName) {
    a.postMessage(s);
}

Вы также можете проверить s instanceof Element, потому что вам не нужно поддерживать IE, я думаю:)

Чтобы проверить, является ли это частью DOM:

function inDOM(elem) {
  do {
      if (elem == document.documentElement) {
         return true;
      }
  } while (elem = elem.parentNode)
  return false;
}​

Ответ 2

Чтобы проверить, является ли объект экземпляром Элемент, используйте instanceof:

s instanceof Element

Чтобы проверить его документ владельца, используйте ownerDocument:

s.ownerDocument == document

Ответ 3

Проверьте s instanceof Node. Каждый объект DOM является Node.