gpt4 book ai didi

JavaScript - 无论如何要删除对象的所有基本方法和属性但保留一个?

转载 作者:行者123 更新时间:2023-12-02 14:37:55 24 4
gpt4 key购买 nike

我正在构建一些应用程序,它可以扫描 DOM 中的元素及其子元素。现在,我可以通过以下代码行获取我需要的数据:

var bodyObj = document.getElementsByTagName("BODY")[0].children;

问题是,bodyObj 对象中充斥着不必要的方法和属性,我只想想要保留 children 方法并清理休息。有什么方法可以实现这一点吗?

PS纯Js。

最佳答案

只有children的Body对象属性

您可能会考虑尝试以下操作:

var bodyObj = document.getElementsByTagName("BODY")[0];

for (var key in bodyObj){
if (bodyObj.hasOwnProperty(key) && key != 'children'){
delete bodyObj[key];
}
}

...就像 their answer 中建议的 Florian Cabirol 。然而,<body>对象的属性是不可枚举的,这意味着它们不会出现在循环中。要获取不可枚举属性,您可以尝试(在 ES5+ 中):

Object.getOwnPropertyNames(bodyObj);

但它仍然无法得到他们。接下来,您可能会想,“我将创建一个包含 HTMLBodyElement 中所有可能的属性/方法名称的数组,并循环遍历它们,如果存在则将其删除。”但是,如果您执行以下操作:

delete bodyObj.baseURI;
console.log(bodyObj.baseURI);

您会注意到它并没有删除它。这是因为您无法从 DOM 对象中删除属性。尝试重新定义它们或 delete他们会默默地失败。

Body 对象的 childrenHTMLElement s

获取document.getElementsByTagName("BODY")[0].children如果没有任何属性/方法,您可以这样做:

var bodyObj = document.getElementsByTagName("BODY")[0].children;

bodyObj = Object.keys(bodyObj).map(function(key) { return bodyObj[key]; });

这会将其从 HTMLCollection 转换为到一个数组,如果你同意的话。您始终可以将其包装在一个对象中:bodyObj = {children: bodyObj}; .

关于JavaScript - 无论如何要删除对象的所有基本方法和属性但保留一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37277187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com