2011-01-22 18 views
11

Pasar los elementos DOM a WebWorkers es complicado ya que todas las referencias al DOM están 'perdidas'. Necesito comprobar los objetos que se pasaron antes de se envía el mensaje de WebWorker.Comprobando si el objeto es un elemento DOM

¿Cuál es la manera más fácil de para comprobar si una instancia de un objeto es un elemento DOM O/Y parte del árbol DOM, O tiene 'hijos' que contienen alguna referencia al árbol DOM?

pieza del uso:

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

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

Esto ya está respondida aquí: http: // stackoverflow.com/questions/4754088/how-to-check-if-object-is-a-dom-element/4754104#4754104;) –

Respuesta

8

Para comprobar si se trata de un elemento Creo obj.nodeName es su mejor apuesta.

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

También puede comprobar s instanceof Element, debido a que no es necesario para apoyar IE supongo :)

Para comprobar si es parte del DOM:

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

... y para comprobar si tiene algún "elemento secundario" que sea elemento DOM, deberás usar el descenso recursivo en todas las propiedades de los artículo (si es un objeto). –

+0

@TJ - Dijo * '" tiene 'hijos' que contienen cualquier referencia al árbol DOM "' *. Si el elemento no es parte del DOM, sus hijos no pueden contener referencias al DOM, tan fácil como eso :) – galambalazs

+0

@gal Note, el OP no dijo el elemento HTML DOM, solo el elemento DOM. (también, dentro de ese largo mote tuyo, ¿dónde está el nombre? :) ¿Está bien migal?) –

0

Comprobar s instanceof Node. Cada objeto DOM es Node.

+0

¿FileReader es un elemento DOM? No pasa esta prueba. – jayarjo

+0

FileReader es * no * un objeto DOM, pero está en lo cierto que cometí un error. 'NodeLists',' DOMStrings', y un par de otras estructuras de lista no son 'Node's, sino que son objetos DOM. –

+2

Votación a la baja para error reconocido pero no corregido. Revertiré cuando sea corregido. – danorton

10

Para comprobar si un objeto es una instancia Element, utilice instanceof:

s instanceof Element 

y para comprobar su documento de propietario, utilice ownerDocument:

s.ownerDocument == document 
Cuestiones relacionadas