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

jQuery中.attr()方法调用失效:遍历DOM元素时的问题排查

问题原因分析:jQuery对象索引取值后无法调用.attr()方法

核心原因很简单:你通过divs[i]取出的是原生DOM元素,不是jQuery对象,而.attr()是jQuery专属的方法,原生DOM元素根本没有这个方法,自然会调用失效。

关键区别说明:

  • jQuery对象是一个包裹了原生DOM元素的类数组结构,自带一系列jQuery特有的便捷操作方法(比如.attr()、.addClass())。
  • 当你用索引[i]或者.get(i)从jQuery对象里取值时,拿到的是数组里的原生DOM节点,它只能调用原生DOM的方法(比如.setAttribute()),不能直接用jQuery的方法。

解决办法

有几种方式可以修复这个问题:

  1. 用jQuery的.eq()方法获取对应索引的jQuery对象
$(function(){
    let divs = $("div");
    for (let i = 0; i < divs.length; i++) {
        const div = divs.eq(i);
        
        div.attr("class", "red");
    }
});
  1. 把原生DOM元素重新包装成jQuery对象
$(function(){
    let divs = $("div");
    for (let i = 0; i < divs.length; i++) {
        const div = $(divs[i]);
        
        div.attr("class", "red");
    }
});
  1. 更简洁的jQuery遍历方式(推荐)
    其实jQuery本身提供了更方便的遍历方法.each(),不用自己写for循环:
$(function(){
    $("div").each(function() {
        $(this).attr("class", "red");
    });
});
  1. 直接批量操作(最简洁)
    如果是给所有div统一设置class,甚至不用遍历,直接调用jQuery方法就能批量处理:
$(function(){
    $("div").attr("class", "red");
});

内容的提问来源于stack exchange,提问作者KolyaKovt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:02:31