jQuery attr() 方法超详细讲解:属性获取、赋值、实战踩坑全解

前言

在我们日常 jQuery 开发中,attr() 是最常用、最核心的属性操作方法。之前做的 select下拉框回显、表格行删除弹窗、动态获取行ID 功能,底层全部依赖 attr() 实现。

很多新手分不清:attr() 到底能操作什么属性?为什么有时候取值是 undefined?为什么和 prop() 效果不一样?

这篇博客带你从零吃透 attr(),包含:完整语法、四种用法、实战案例、高频踩坑、attr与prop核心区别,看完彻底搞定前端DOM属性操作。

一、attr() 方法核心定义

attr = attribute(HTML标签属性)

作用:专门用于 获取 / 设置 / 修改 / 删除 HTML 标签上的原生属性、自定义属性。

核心特点:操作的是 HTML 结构上的属性,也就是你写在标签上看得见的属性。

适用场景:自定义属性、data-*属性、src、href、title、class、name、id 等标签固有属性。

二、attr() 四种完整语法(必记)

  1. 获取属性值:$(selector).attr('属性名')
    不传第二个参数,代表 读取属性值,返回对应属性的字符串值。
    删除此行
  1. 单个属性赋值:(selector).attr('属性名','值') 传两个参数,代表 给元素设置/覆盖属性值。 // 修改按钮自定义ID ('.del-btn').attr('data-id','2026');
    // 修改图片地址
    ('img').attr('src','./images/new.png'); // 修改标签标题 ('a').attr('title','点击跳转详情');
  2. 批量设置多个属性(高效写法)
    传入 对象格式,一次性修改多个属性,简化代码。
    $('img').attr({
    src: './img/banner.png',
    title: '首页轮播图',
    alt: '轮播图片',
    class: 'banner-img'
    });
  3. 函数动态赋值(动态渲染常用)
    第二个参数传函数,可根据索引、旧值动态修改属性,适合列表批量处理。
    // 给所有列表项动态设置自定义序号
    ('li').attr('data-index',function(index,oldVal){ return index + 1; // 根据下标赋值 1、2、3... }); 三、配套方法:removeAttr() 删除属性 如果需要移除标签上的某个属性,不用手动赋值空,直接使用专属方法。 // 移除单个属性 ('.del-btn').removeAttr('data-id');
    // 移除多个属性,空格分隔
    ( ′ i m g ′ ) . r e m o v e A t t r ( ′ s r c t i t l e ′ ) ; 四、项目实战:你做过的功能底层原理结合你之前写的表格删除弹窗、动态获取行 I D 场景,完美对应 a t t r ( ) 用法。实战场景:表格每行删除按钮获取当前行 I D 动态渲染表格时,给删除按钮绑定 d a t a − i d 存储当前行数据 I D ,点击时用 a t t r ( ) 获取。 / / 1. 渲染时绑定自定义属性 h t m l + = ' < b u t t o n c l a s s = " r e w m " d a t a − i d = " ('img').removeAttr('src title'); 四、项目实战:你做过的功能底层原理 结合你之前写的 表格删除弹窗、动态获取行ID 场景,完美对应 attr() 用法。 实战场景:表格每行删除按钮获取当前行ID 动态渲染表格时,给删除按钮绑定 data-id 存储当前行数据ID,点击时用 attr() 获取。 // 1. 渲染时绑定自定义属性 html += `<button class="rewm" data-id=" (′img′).removeAttr(′srctitle′);四、项目实战:你做过的功能底层原理结合你之前写的表格删除弹窗、动态获取行ID场景,完美对应attr()用法。实战场景:表格每行删除按钮获取当前行ID动态渲染表格时,给删除按钮绑定data−id存储当前行数据ID,点击时用attr()获取。//1.渲染时绑定自定义属性html+='<buttonclass="rewm"data−id="{item.id}">删除`

// 2. 点击删除按钮,获取当前行ID

$(document).on("click", ".rewm", function () {

// 核心:attr 获取自定义属性

let delId = $(this).attr('data-id');

console.log(delId); // 当前点击行的ID

});

为什么不用 val()?

val() 只能获取表单 value 值,自定义属性只能用 attr() 获取,这是新手高频误区。

五、重中之重:attr() 和 prop() 终极区别(必踩坑)

90% 的属性bug,都是因为 attr 和 prop 用混了,一张表彻底分清:

方法

操作对象

适用场景

返回值特点

attr()

HTML标签属性(写在标签上的)

自定义属性、data-*、src、href、title

永远返回 字符串,取不到返回 undefined

prop()

DOM元素对象属性

复选框checked、单选框selected、disabled

返回 布尔值 true/false

经典错误案例(新手必错)

总结口诀:自定义属性用 attr,状态属性用 prop。

六、attr() 高频踩坑清单(避坑指南)

坑1:动态DOM获取属性为 undefined

动态渲染的按钮、列表,直接绑定事件会获取不到属性。

✅ 解决:必须使用 事件委托 ( d o c u m e n t ) . o n ( ) ,再用 a t t r ( ) 获取属性。坑 2 :多次赋值不生效 a t t r ( ) 赋值会直接覆盖原有属性值,不会拼接。需要拼接需手动获取旧值再叠加。坑 3 :混淆属性类型 a t t r 获取的所有值都是字符串,如果是数字 I D ,需要手动转数字: N u m b e r ( (document).on(),再用 attr() 获取属性。 坑2:多次赋值不生效 attr() 赋值会 直接覆盖原有属性值,不会拼接。需要拼接需手动获取旧值再叠加。 坑3:混淆属性类型 attr 获取的所有值都是 字符串,如果是数字ID,需要手动转数字:Number( (document).on(),再用attr()获取属性。坑2:多次赋值不生效attr()赋值会直接覆盖原有属性值,不会拼接。需要拼接需手动获取旧值再叠加。坑3:混淆属性类型attr获取的所有值都是字符串,如果是数字ID,需要手动转数字:Number((this).attr('data-id'))。

坑4:操作复选框、禁用状态用attr

checked / disabled 属于DOM状态,用attr无效,必须用 prop。

七、全文总结(极简记忆)

  1. attr() 只管HTML标签属性:可读、可写、可批量赋值;
  2. 自定义属性、data-id、src、href 一律用 attr;
  3. 复选框、禁用、选中状态 一律用 prop;
  4. 动态DOM属性获取,必须配合 事件委托;
  5. attr 返回值全部为字符串,数字场景需手动转换类型。
相关推荐
tryCbest4 小时前
Vue3——第 6 篇:事件处理与表单绑定——v-on 与 v-model
前端·javascript·vue.js
恋猫de小郭4 小时前
Flutter 的文字为什么比 SwiftUI 更细?问题主要在 Skia 的 256 项查找表里
android·前端·flutter
lexiangqicheng4 小时前
前端高阶面试核心通关指南:深入解析Vue3与React18底层原理及性能优化
前端·面试·性能优化
怕浪猫4 小时前
前端对接聊天 API:我用 React 做了一个比 ChatGPT 还好看的界面
前端·后端·面试
程序员小孔.4 小时前
基于 Spring Cloud + Vue 的 JEEWMS 开源仓储管理平台设计与实现
前端·javascript·vue.js·spring boot·spring cloud·开源
IT_陈寒4 小时前
深入理解Python:核心原理与最佳实践
前端·人工智能·后端
创世虚拟世界4 小时前
把 3D 虚拟世界拉到本地:vibe coding 的手感,是从看见自己那一行改动开始的
javascript·数据库·人工智能·3d·gitee·虚拟现实
我喜欢就喜欢4 小时前
Chrome 插件开发实战指南
前端·chrome
夕阳_醉了4 小时前
花了一天的时间,地板式扫盲了vue3所有API盲点
前端·javascript·vue.js
LinDaiuuj4 小时前
Figma Specs 高效交付与开发协作指南
前端·figma