10

我正在寻找(动态)获取浏览器当前知道的 HTML 元素列表,例如HTMLPreElementHTMLSpanElement。这些对象是全局的,即

console.log('HTMLPreElement' in window);  //=> true

所以我想我可以这样使用getOwnPropertyNames

console.log(Object.getOwnPropertyNames(window));

获取全局属性的完整列表(MDN 声明这会返回可枚举和不可枚举的属性)。

使用上面的方法,我得到了一个包含大约 70 个属性名称的数组。但是,它不包括 -only 之类的HTMLPreElement对象HTMLElement。我也试过:

console.log(Object.getOwnPropertyNames(window.Window.prototype));

这带回了一个更大的列表(包括addEventListener等),但同样,没有HTMLPreElement

HTML{Tag}Element那么,这些对象到底在哪里?

4

3 回答 3

6
for (var prop in window)
    console.log(prop);

这就是你需要的吗?

于 2012-04-29T17:55:50.680 回答
5

在 Firefox 中,除非明确要求作为全局变量或属性,否则似乎不会添加它们的全局对象是元素的行为。也许 Firefox 将它们延迟加载到环境中,这样它们就不会消耗内存,除非确实需要它们。

Object.getOwnPropertyNames 除非如上所述首先明确引用它们,否则它们似乎在简单地请求全局对象的键时不会出现。

http://jsfiddle.net/mBAHm/

于 2012-05-01T20:49:40.803 回答
2
var obj = window;
while(obj){
    for(let prop of Reflect.ownKeys(obj)){
        console.log(prop);
    };
    obj = Object.getPrototypeOf(obj);
};
于 2017-09-15T19:49:40.103 回答