jQuery遍历div时出现Cannot read properties of undefined报错如何解决
错误原因
- 核心错误是对jQuery
each方法的回调参数理解有误:each(function(index, element))里的element本身就是当前遍历到的单个DOM元素,不需要再加索引[a]取值,你额外加[a]会读取不存在的属性,得到undefined,自然无法调用attr或者indexOf方法。 - 第二个错误是DOM元素和jQuery对象的方法混用:原生DOM元素没有
attr方法,只有jQuery封装的对象才有,原生DOM要拿属性用getAttribute,或者把DOM元素用$()包裹成jQuery对象再调用attr。 - 你修改后的写法
$(element)[a].attr('title')问题更大:$(element)是单元素jQuery对象,[a]会把它转回原生DOM元素(同时因为索引错误大概率返回undefined),原生DOM元素没有attr方法,进一步触发错误。
修正后的代码
var field = $("#area_en" + cardArray[myId]['type']).find("div"); field.each(function(a, element) { // 两种写法二选一 // 写法1:把DOM转成jQuery对象调用attr const title = $(element).attr('title'); // 写法2:原生DOM直接拿属性,不需要转jQuery // const title = element.getAttribute('title'); console.log("cC type:" + cardArray[myId]['type'] + "- index:" + a + " title: " + title); // 先判断title存在再调用indexOf,避免没有title属性的元素报错 if (title && title.indexOf("player") < 0) { doStuff(); } });
内容的提问来源于stack exchange,提问作者dux0r
相关产品推荐
相关产品推荐

