javascript - 执行简单的脚本,但控制台警告 ~= 'getComputedStyle' on 'Window': parameter is not of type 'Element'
问题描述
当在 chrome 的控制台中运行时,这会删除网页顶部的固定菜单栏(就像 SO 一样)。还有其他几个类似的问题,但他们问“为什么不执行”(语法错误?) - 这是一个简单且易于测试的示例,它执行但警告:
未捕获的类型错误:无法在“窗口”上执行“getComputedStyle”:参数 1 不是“元素”类型。
var target = document.getElementsByTagName("*");
for(ii in target){
if(window.getComputedStyle(target[ii]).position === 'fixed'){
target[ii].style.display = 'none';
console.log('it"s gone');
}
}
getElementsByTagName 返回一个活动节点列表,它们如何不被视为元素?
解决方案
问题在于,它不仅for .. in
会为您提供像对象这样的数组的索引(它不是数组,它是HTMLCollection
我认为或NodeList
解决方案 1:检查 target.hasownPropert(ii) 是否为真
var target = document.getElementsByTagName("*");
for(var ii in target){
if(target.hasOwnProperty(ii)) {
if(window.getComputedStyle(target[ii]).position === 'fixed'){
target[ii].style.display = 'none';
console.log('it"s gone');
}
}
}
解决方案2:用于...的
var target = document.getElementsByTagName("*");
for(var ii of target){
if(window.getComputedStyle(ii).position === 'fixed'){
ii.style.display = 'none';
console.log('it"s gone');
}
}
解决方案 3:使用 document.querySelectorAll
document.querySelectorAll('*').forEach(ii => {
if(window.getComputedStyle(ii).position === 'fixed'){
ii.style.display = 'none';
console.log('it"s gone');
}
});
推荐阅读
- hyperledger-fabric - Fabric 事件监听器无法捕获背书失败场景
- python - 导入在 python 中实际上是如何工作的?
- css - 弹出菜单 - 可以滚动到底部以显示整个菜单
- java - 如何进行单元测试并将消息发送到嵌入式代理?
- spring-cloud-dataflow - JDBC Source -> JDBC Sink 绑定错误
- android - Flutter mlkit 阿拉伯语文本检测器
- c - “一元'*'的类型参数无效”错误
- java - Spring ConfigurationProperties 文件 - 提供默认值
- qradar - 如何通过 REST api 为 IBM Qradar 攻击使用过滤器描述字段
- python - 如何编写python程序以使用reduce()组合两个字符串的第二个字母