[英]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
它们将无提示地失败。
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.