You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery在数组循环内获取元素CSS值时报getComputedStyle错误如何解决

问题原因

Uncaught TypeError: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.
该报错的核心原因是你使用了childNodes获取子节点:

  • childNodes返回的是全类型节点集合,包含元素节点、文本节点、注释节点,你HTML中#waypoints标签内部的换行、空格都会被识别为文本节点,这类节点不属于Element类型
  • 调用$(wayps).css("left")获取属性时,jQuery内部会调用getComputedStyle方法,要求传入参数必须为Element类型,传入文本节点就会触发报错
  • 设置css属性时不报错是因为jQuery对设置操作做了容错处理,遇到非元素类型的节点会直接跳过操作,不会抛出异常
解决方案

方案1:替换childNodes为children(推荐)

children属性只会返回元素类型的子节点,自动过滤文本、注释等非元素节点,修改后代码如下:

const wayps = document.querySelector('#waypoints');
// 把childNodes替换为children
const children = wayps.children;
var x,y,canvas_x,canvas_y,px_x,px_y;
children.forEach(function(wayps) {
    x = $(wayps).css("left");
    x = parseInt(x)/2; // 补充:css返回带px后缀的字符串,需转成数字再计算避免出现NaN
    $(wayps).css("left" , x+"px");
});

方案2:保留childNodes,增加节点类型判断

如果需要保留childNodes遍历所有节点,可以在逻辑前增加节点类型校验,只处理元素节点:

const wayps = document.querySelector('#waypoints');
const children = wayps.childNodes;
var x,y,canvas_x,canvas_y,px_x,px_y;
children.forEach(function(wayps) {
    // nodeType为1代表是元素节点,非元素节点直接跳过
    if(wayps.nodeType !== 1) return;
    x = $(wayps).css("left");
    x = parseInt(x)/2;
    $(wayps).css("left" , x+"px");
});

内容的提问来源于stack exchange,提问作者Vagelis Vag Ov Oganesov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:06:07