相关疑难解决方法(0)

JavaScript isDOM - 如何检查JavaScript对象是否是DOM对象?

我想要:

document.createElement('div')  //=> true
{tagName: 'foobar something'}  //=> false
Run Code Online (Sandbox Code Playgroud)

在我自己的脚本中,我曾经只是使用它,因为我从来不需要tagName作为属性:

if (!object.tagName) throw ...;
Run Code Online (Sandbox Code Playgroud)

因此,对于第二个对象,我想出了以下作为快速解决方案 - 主要是有效的.;)

问题是,它取决于执行只读属性的浏览器,而不是所有人都这样做.

function isDOM(obj) {
  var tag = obj.tagName;
  try {
    obj.tagName = '';  // Read-only for DOM, should throw exception
    obj.tagName = tag; // Restore for normal objects
    return false;
  } catch (e) {
    return true;
  }
}
Run Code Online (Sandbox Code Playgroud)

有一个很好的替代品吗?

javascript dom object

223
推荐指数
8
解决办法
16万
查看次数

检查对象是否是DOM元素

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

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

一块用法:

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

s //<--should not be a DOM object
Run Code Online (Sandbox Code Playgroud)

javascript dom web-worker

11
推荐指数
2
解决办法
6823
查看次数

Instanceof 在 iframe 中失败

以下代码返回true.

console.log(document.createElement('script') instanceof Element);
Run Code Online (Sandbox Code Playgroud)


<iframe>上下文中执行相同的操作会返回false

let iframe = document.querySelector('iframe');
iframe = iframe.contentDocument || iframe.contentWindow.document;

console.log(iframe.createElement('script') instanceof Element);
Run Code Online (Sandbox Code Playgroud)

演示

这是为什么?

javascript iframe instanceof

4
推荐指数
1
解决办法
880
查看次数

标签 统计

javascript ×3

dom ×2

iframe ×1

instanceof ×1

object ×1

web-worker ×1