将DOM元素传递给WebWorkers变得棘手,因为对DOM的所有引用都“丢失”了。我需要检查在发送WebWorker消息之前传递的对象。
检查对象实例是DOM元素的OR / AND部分的最快方式是什么,或者是否包含对DOM树的任何引用的“子” ?
用法:
var a = new SharedWorker("bigdatahandler.js");
a.postMessage(s);
s //<--should not be a DOM object
答案 0 :(得分:10)
要检查对象是否为Element个实例,请使用instanceof
:
s instanceof Element
要查看其所有者文档,请使用ownerDocument
:
s.ownerDocument == document
答案 1 :(得分: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;
}
答案 2 :(得分:0)
检查s instanceof Node
。每个DOM对象都是Node
。