Javascript 我可以制作一个元素吗;“不可取消”;通过重新定义本机函数从DOM中删除?
假设我有以下结构:Javascript 我可以制作一个元素吗;“不可取消”;通过重新定义本机函数从DOM中删除?,javascript,html,dom,redefinition,Javascript,Html,Dom,Redefinition,假设我有以下结构: <html> <head></head> <body> <div id="myDiv"></div> </body> </html> 对于其他功能,我也可以这样做,例如: querySelector querySelectorAll getElementsByTagName getElementsByClassName 等等 这是可行的,但是通
<html>
<head></head>
<body>
<div id="myDiv"></div>
</body>
</html>
对于其他功能,我也可以这样做,例如:
querySelector
querySelectorAll
getElementsByTagName
getElementsByClassName
- 等等
document.body.children[0]
那么有没有一种方法可以使我的div不可编译,也就是说,我可以重新定义
children
字段的值吗?好吧,这似乎是一种可行的尝试-至少对于document.body.children
。我在MDN的网站上测试了以下代码的一个变体,以隐藏作为文档正文直接子项的所有脚本标记
其工作方式是告诉document.body
使用名为children
的新属性。然后,我们返回子对象的原始内容,减去我们不想要的内容
var oldchildren = document.body.children;
Object.defineProperty(document.body, 'children', {
get() {
var lst = [];
for (var item of oldchildren) {
if (!(item.tagName === "div" && item.id === 'myDiv'))
lst.push(item);
}
return lst;
}
});
在此代码运行后,任何引用document.body.children
的代码都不会看到div
。此代码可能会导致您网站上的其他代码行为不当。您为什么要这样做?不完全是您的意思,但是。。。。。。您可以将其从DOM中删除。找不到不存在的东西!我正在尝试破解一个大学项目的代码,想知道这种方式是否可行。很遗憾,我无法删除元素。我不想就此得出明确结论,但如果浏览器能够找到要显示的元素,那么任何人都可以。所以如果你不能从DOM中删除它,那么任何人都可以在DOM中访问它。谢谢大家。我想让元素以任何方式(不仅仅是id)都不可编译。我认为我必须覆盖您描述的所有字段(children、firstChild、lastChild等)以及所有搜索函数(querySelector、getElementById等)。我将尝试这种方法(感谢Amy的回答),但我对代理方法也感兴趣@帕特里克·罗伯茨。再次感谢!最好将lst
定义为Object.create(HTMLCollection)
,但当然,当我测试时,会尝试迭代,或者简单地检查length
访问器属性抛出TypeError
,所以。。。我想这没关系
var oldchildren = document.body.children;
Object.defineProperty(document.body, 'children', {
get() {
var lst = [];
for (var item of oldchildren) {
if (!(item.tagName === "div" && item.id === 'myDiv'))
lst.push(item);
}
return lst;
}
});