11

将 DOM 元素传递给 WebWorkers 变得很棘手,因为对 DOM 的所有引用都“丢失”了。我需要检查在发送 WebWorker 的消息之前传递的对象。

检查对象实例是否是 DOM 树的 DOM 元素 OR/AND 部分,或者是否具有包含对 DOM 树的任何引用的“子代”,最快的方法是什么?

一块用法:

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

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

3 回答 3

10

要检查对象是否是Element实例,请使用instanceof

s instanceof Element

要检查其所有者文档,请使用ownerDocument

s.ownerDocument == document
于 2011-01-22T17:36:14.927 回答
8

检查它是否是一个元素,我认为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;
}​
于 2011-01-22T12:12:35.597 回答
1

检查s instanceof Node。每个 DOM 对象都是一个Node.

于 2011-01-22T16:39:44.980 回答