相关疑难解决方法(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万
查看次数

如何判断元素是否在shadow DOM中?

我有一个项目,我在本地使用shadow DOM(不是通过polyfill).我想检测一个给定element是否包含在shadow DOM或light DOM中.

我已经查看了元素上的所有属性,但似乎没有根据元素所在的DOM类型而有所不同.

如何确定元素是影子DOM还是轻型DOM的一部分?


以下是针对此问题的"shadow DOM"和"light DOM"的示例.

 (light root) • Document
      (light)   • HTML
      (light)   | • BODY
      (light)   |   • DIV
(shadow root)   |     • ShadowRoot
     (shadow)   |       • DIV 
     (shadow)   |         • IFRAME 
 (light root)   |           • Document
      (light)   |             • HTML
      (light)   |             | • BODY
      (light)   |             |   • DIV
(shadow root)   |             |     • ShadowRoot
     (shadow)   |             |       • DIV
       (none)   |             • [Unattached DIV of second Document]
       (none)   • [Unattached …

javascript html5 css-selectors shadow-dom

28
推荐指数
5
解决办法
4138
查看次数

HTML 5,内联SVG和SVG DOM的命名空间感知

以下问题令我困惑.我知道他们有关系,但......

  1. HTML 5名称空间是否可识别(包含SVG /其他XML方言的标签)?
  2. 如果不是,那么这个怎么样 -

    我已阅读本旧的链接,但我完全糊涂了......因为Mozilla的说:"动态修改联SVG,脚本需要做这种方式" -所以最后,我怎么能动态地修改联SVG(如HTML 5是不是名称空间感知)?

  3. 或者页面需要作为(X)HTML 5提供?


细节 -

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>hello-SVG</title>
</head>
<body>
    <svg width="200" height="200">
        <rect x="0" y="0" width="100" height="100" fill="blue"></rect>
    </svg>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

上面的代码是rect在HTML 5中呈现(使用SVG)的正确方法.现在,要使用JavaScript修改SVG,Mozilla建议使用 API.我的问题是,如果HTML 5不支持名称空间,那么这样做的重点是什么?对于这种情况,浏览器会自动切换到(X)HTML 5吗?

我在SO上看了这篇评论,我发现它最接近我正在寻找的答案 -

我猜HTML 5 SVG的情况基本上是"没有命名空间的SVG在解析过程中会添加名称空间(但之后它就像(X)HTML之前的那样)".

html javascript xhtml html5 svg

11
推荐指数
1
解决办法
3187
查看次数

当通过窗口传递对象时,instanceof运算符失败

为了在窗口之间传递数据,我通过该window.open方法打开新窗口,并将新打开的窗口的属性设置为对象.这使我不仅可以传递数据,还可以共享变量的实例,这意味着如果我在一个窗口上修改对象或其任何派生属性,它会在所有窗口上修改它.

然而,问题是使用instanceof运算符非常有趣.

当我做

typeof m
m instanceof Object
Run Code Online (Sandbox Code Playgroud)

第一行返回,"object"而第二行返回false.

我特别需要instanceof运算符来检查数组和对象.

这是一个示例的小提琴(警告:尝试在页面加载时打开一个窗口,因此弹出窗口阻止程序可能会阻止它).http://jsfiddle.net/Chakra/mxf2P/1/

javascript tabs window typeof instanceof

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

标签 统计

javascript ×4

html5 ×2

css-selectors ×1

dom ×1

html ×1

instanceof ×1

object ×1

shadow-dom ×1

svg ×1

tabs ×1

typeof ×1

window ×1

xhtml ×1