Question

    

Cette question a déjà une réponse ici:

         

Passage des éléments DOM à WebWorkers devient délicat car toutes les références au DOM sont « perdus ». Je dois vérifier les objets qui sont passés avant le message de WebWorker est envoyé.

Quelle est la le plus rapide moyen de vérifier si une instance d'un objet est un DOM-élément OU / et une partie de l'arbre DOM, ou a un « enfants » qui contiennent des références à l'arbre DOM ?

morceau de l'usage:

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

s //<--should not be a DOM object
Était-ce utile?

La solution

Pour vérifier si elle est un élément que je pense que obj.nodeName est votre meilleur pari.

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

Vous pouvez également vérifier s instanceof Element, parce que vous n'avez pas besoin de soutenir guess IE I:)

Pour vérifier si elle fait partie du DOM:

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

Autres conseils

Pour vérifier si un objet est un élément par exemple, l'utilisation instanceof:

s instanceof Element

Et pour vérifier son document propriétaire, utilisez ownerDocument :

s.ownerDocument == document

Vérifier s instanceof Node. Chaque objet DOM est un Node.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top