什么让documentElement为0返回

时间:2013-09-11 13:36:42

标签: javascript dom

大多数javascript库包含类似于:

的行
    var b = (a ? a.ownerDocument || a: 0).documentElement;

如果anull,那么(0).documentElement应该返回什么?

4 个答案:

答案 0 :(得分:4)

最有可能:未定义 还有什么?

答案 1 :(得分:4)

来自jQuery / Sizzle评论:

http://jsapi.info/jquery/1.7.2/jQuery.isXMLDoc

  

对于尚不存在的情况,会验证documentElement   (例如在IE中加载iframe - #4833)

因此返回undefined只是可爱的语法 - 这是在documentElement上调用0的结果。

下一行有检查:

return documentElement ? documentElement.nodeName !== "HTML" : false;

所以无论如何它都会返回false。

答案 2 :(得分:2)

这是一个简写:

var b; // defaults to "undefined"
if (a) b = a.ownerDocument.documentElement || a.documentElement;

正在检查是否已在DOM树中创建了DOM documentElement。 (0).documentElement访问一个不存在的属性,默认为undefined。如果未定义“documentElement”,则尚未创建它。

这可能更容易可视化:

a.ownerDocument.documentElement || // try this first
a.documentElement || // fallback
undefined; //documentElement has not been created yet

这不仅仅是“可爱的语法”,而是建议的另一个答案。它是“手动缩小”,因为在像JavaScript这样的动态类型语言中,缩小器无法确定“a”和“a.ownerDocument”可能属于同一类型,因此只能执行空白删除。

通过Closure Compiler运行我的上述代码产生:

var b;a&&(b=a.documentElement||a.ownerDocument.documentElement);

与此同时,您在问题中提出的“手动缩小”版本通过缩小器生成:

var b=(a?a.ownerDocument||a:0).documentElement;

结果:

Without manual minification (my code) + Closure minifier: 64 characters
With manual minification (your original code): 54 characters
With manual minification (your original code) + Closure minifier: 47 characters

答案 3 :(得分:0)

ownerDocument属性返回html节点的文档所有者,作为文档对象。 html文档本身是元素的ownerDocument。如果它为null,我猜(0).documentElement在页面包含多个文档时返回初始文档。 ownerdocument可用于相应页面中的多个文档内创建html元素