gpt4 book ai didi

javascript - 引用 DOM 元素作为 window 对象的属性

转载 作者:行者123 更新时间:2023-12-03 08:44:19 26 4
gpt4 key购买 nike

根据this blog post可以将 DOM 元素引用为 window 对象的命名属性(基于它们的 name 属性)。上面的代码表明该表单确实可以通过 window.aform 进行访问。但为什么在迭代 window 的所有属性时却找不到该属性?

<html>
<body>
<form name='aform'>
</form>
<script>
// get all properties, including non-enumerable ones: http://stackoverflow.com/a/8024294/274677
function getAllProperties(obj){
var allProps = [], curr = obj;
do {
var props = Object.getOwnPropertyNames(curr)
props.forEach(function(prop){
if (allProps.indexOf(prop) === -1)
allProps.push(prop)
})
} while(curr = Object.getPrototypeOf(curr))
return allProps
}
var findIn = function(x,y) {
var ps = getAllProperties(x);
for (var i = 0 ; i < ps.length; i++) {
var propertyName = ps[i];
try {
if (x[propertyName]===y)
return 'found as property ['+propertyName+']';
} catch (e) {
console.log('failed to read property ['+propertyName+'] due to: ['+e.name+']');
}
}
return "not found";
}
console.log(findIn(window, window.aform));
console.log(window['aform']===window.aform);
console.log(window.aform);
</script>
</body>
</html>

当上面的页面加载时,我在控制台上看到:

not found
true
<form name="aform"></form>

最佳答案

某些浏览器将表单引用作为属性添加到 window 对象中,有些浏览器仅将其设置为可用,以便您可以像属性一样读取它,但实际上并未将其添加为属性。

当我在 Firefox 中尝试时,它找到了该属性,但在 Chrome、IE 和 Edge 中却找不到。

按名称获取表单的最安全方法是使用 document.forms 集合,其中明确定义了表单可用。

关于javascript - 引用 DOM 元素作为 window 对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32957798/

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