繁体   English   中英

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

[英]JavaScript - anyway to remove all base methods and attributes of an Object but keep one?

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

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

这个问题,该bodyObj对象被垃圾邮件与不必要的方法和属性,我只是想保持children的方法和清洁休息。 有什么办法做到这一点?

PS Pure Js。

仅具有children属性的身体对象

您可能会想尝试以下方法:

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

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

...就像弗洛里安·卡比罗尔在回答中建议的那样。 但是, <body>对象的属性是不可枚举的,这意味着它们不会出现在循环中。 要获取不可枚举的属性,您可以尝试(在ES5 +中):

Object.getOwnPropertyNames(bodyObj);

但是它仍然不会得到他们。 接下来,您可能会想:“我将对HTMLBodyElement中所有可能的属性/方法名称进行数组,然后遍历它们,如果存在则将其删除。” 但是,如果您执行以下操作:

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

您会注意到它没有删除它。 那是因为您不能从DOM对象中删除属性。 尝试重新定义它们或delete它们将无提示地失败。

Body对象的children HTMLElement

为了得到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};

您可以执行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM