当前位置: 首页 > news >正文

jQuery 选择器

jQuery 选择器详解

jQuery 选择器是 jQuery 最强大的功能之一,它允许你快速、准确地选中 DOM 元素进行操作。jQuery 选择器基于 CSS 选择器,并扩展了一些特有的选择器。


一、基础选择器

1. ID 选择器

// 选择 id 为 "myId" 的元素$("#myId");
  • 特点:唯一性,页面中只能有一个元素使用该 ID。
  • 性能:最快,因为浏览器原生使用getElementById

2. 类选择器

// 选择所有 class 为 "myClass" 的元素$(".myClass");
  • 特点:可重复使用,一个类可应用于多个元素。
  • 性能:较快,使用getElementsByClassName

3. 标签选择器

// 选择所有 <p> 标签$("p");// 选择所有 <div> 标签$("div");
  • 特点:选择所有指定标签的元素。
  • 性能:较慢,使用getElementsByTagName

4. 通配符选择器

// 选择所有元素$("*");
  • 特点:选择页面中所有元素,通常用于初始化或全局操作。
  • 性能:最慢,慎用。

5. 组合选择器

// 选择 id 为 "myId" 或 class 为 "myClass" 的元素$("#myId, .myClass");// 选择多个标签$("div, p, span");

二、层级选择器

1. 后代选择器

// 选择 "div" 元素内部所有的 "p" 元素(包括嵌套多层)$("div p");

2. 子元素选择器

// 选择 "div" 元素的直接子元素 "p"(不包括嵌套更深的 p)$("div > p");

3. 相邻兄弟选择器

// 选择紧接在 "h1" 元素之后的第一个 "p" 元素$("h1 + p");

4. 通用兄弟选择器

// 选择 "h1" 元素之后的所有同级 "p" 元素$("h1 ~ p");

三、过滤选择器

1. 基本过滤选择器

// 第一个匹配元素$("li:first");// 最后一个匹配元素$("li:last");// 指定索引的元素(从 0 开始)$("li:eq(2)");// 第 3 个 li// 索引大于指定值的元素$("li:gt(2)");// 索引 > 2 的 li// 索引小于指定值的元素$("li:lt(2)");// 索引 < 2 的 li// 奇数索引元素(从 0 开始,即第 2, 4, 6...个)$("li:odd");// 偶数索引元素(从 0 开始,即第 1, 3, 5...个)$("li:even");

2. 内容过滤选择器

// 包含指定文本的元素$("div:contains('Hello')");// 包含子元素的元素(非空元素)$("div:has(p)");// 有子元素的元素$("div:parent");// 没有子元素的元素$("div:empty");

3. 可见性过滤选择器

// 可见元素$("div:visible");// 隐藏元素$("div:hidden");
  • 注意display: nonevisibility: hiddenopacity: 0的元素都被视为隐藏。

4. 属性过滤选择器

// 有指定属性的元素$("input[name]");// 属性值等于指定值的元素$("input[name='username']");// 属性值不等于指定值的元素$("input[name!='username']");// 属性值以指定值开头的元素$("input[name^='user']");// 属性值以指定值结尾的元素$("input[name$='name']");// 属性值包含指定值的元素$("input[name*='ser']");// 属性值等于指定值或多个值的元素(多选框)$("input[name='newsletter']:checkbox[value='news']");

5. 子元素过滤选择器

// 第一个子元素$("li:first-child");// 最后一个子元素$("li:last-child");// 第 n 个子元素(从 1 开始)$("li:nth-child(2)");// 偶数子元素$("li:nth-child(even)");// 奇数子元素$("li:nth-child(odd)");// 只包含一个子元素的元素$("div:only-child");

四、表单选择器

1. 表单元素类型选择器

// 所有 input, textarea, select, button 元素$(":input");// 所有 input 元素$(":input[type='text']");// 所有文本框$(":text");// 所有密码框$(":password");// 所有单选框$(":radio");// 所有复选框$(":checkbox");// 所有提交按钮$(":submit");// 所有重置按钮$(":reset");// 所有按钮$(":button");// 所有文件上传框$(":file");// 所有图像域$(":image");

2. 表单状态选择器

// 可用的表单元素$(":enabled");// 禁用的表单元素$(":disabled");// 选中的单选框或复选框$(":checked");// 选中的下拉选项$(":selected");

五、选择器组合使用示例

1. 复杂选择

// 选择 class 为 "container" 的 div 中,所有 class 为 "item" 且可见的 p 元素$("div.container p.item:visible");// 选择 id 为 "list" 的 ul 中,所有奇数索引的 li 元素$("#list li:odd");// 选择所有 name 属性以 "user" 开头且未被禁用的 input 元素$("input[name^='user']:enabled");

2. 链式选择

// 先选择所有 div,再过滤出 class 为 "active" 的$("div").filter(".active");// 先选择所有 p,再排除 class 为 "hidden" 的$("p").not(".hidden");// 先选择所有 li,再获取第一个$("li").first();

六、性能优化建议

1. 优先使用 ID 选择器

// ✅ 推荐:最快$("#myId");// ❌ 不推荐:较慢$("div#myId");

2. 避免过度使用通配符

// ❌ 性能差:选择所有元素$("*").filter(".active");// ✅ 性能好:直接选择$(".active");

3. 使用上下文参数

// ✅ 推荐:限制搜索范围$(".item","#container");// 等同于 $("#container .item")// ❌ 不推荐:全局搜索$(".item");

4. 缓存选择器

// ❌ 低效:每次循环都重新选择for(vari=0;i<100;i++){$(".item").addClass("active");}// ✅ 高效:缓存选择器var$items=$(".item");for(vari=0;i<100;i++){$items.addClass("active");}

七、常见陷阱与注意事项

1. 选择器字符串格式

// ✅ 正确$("#myId");$(".myClass");// ❌ 错误:ID 选择器不能有空格$("# myId");// 错误// ❌ 错误:类选择器不能有空格$(". myClass");// 错误

2. 特殊字符转义

// 如果 ID 或 class 包含特殊字符,需要转义$("#my\\#id");// 选择 id 为 "my#id" 的元素$(".my\\.class");// 选择 class 为 "my.class" 的元素

3. 选择器大小写

// jQuery 选择器是大小写敏感的$("#myId");// 正确$("#myid");// 错误,如果实际 ID 是 "myId"

4. 空选择器

// 如果选择器没有匹配到任何元素,返回空 jQuery 对象var$empty=$("#nonExistent");console.log($empty.length);// 0console.log($empty);// jQuery 对象,但长度为 0

八、选择器速查表

类型语法说明
ID#id选择指定 ID 的元素
Class.class选择指定 class 的元素
Tagtag选择指定标签的元素
后代ancestor descendant选择后代元素
子元素parent > child选择直接子元素
相邻prev + next选择紧接的兄弟元素
通用兄弟prev ~ siblings选择所有同级元素
:first:first第一个匹配元素
:last:last最后一个匹配元素
:eq:eq(index)指定索引的元素
:gt:gt(index)索引大于指定值的元素
:lt:lt(index)索引小于指定值的元素
:contains:contains(text)包含指定文本的元素
:has:has(selector)包含指定子元素的元素
:visible:visible可见元素
:hidden:hidden隐藏元素
:enabled:enabled可用表单元素
:disabled:disabled禁用表单元素
:checked:checked选中的单选/复选框
:selected:selected选中的下拉选项

九、实战示例

1. 表单验证

// 检查所有必填字段是否为空$("input[required]:not(:filled)").addClass("error");// 检查所有选中的复选框varcheckedCount=$("input[type='checkbox']:checked").length;

2. 动态列表操作

// 删除所有奇数行的表格行$("tr:odd").remove();// 高亮包含特定文本的单元格$("td:contains('Error')").addClass("highlight");

3. 导航菜单

// 激活当前页面的菜单项$("a[href='"+window.location.pathname+"']").addClass("active");// 展开所有包含子菜单的父菜单项$("li:has(ul)").addClass("has-submenu");

jQuery 选择器功能强大且灵活,熟练掌握这些选择器可以大大提高开发效率。在实际项目中,建议根据具体场景选择最合适的选择器,并注意性能优化。

http://www.cnnetsun.cn/news/1972330.html

相关文章:

  • 避坑指南:在PlatformIO上为ESP32-S3移植LVGL、AI语音和摄像头时,我遇到的5个典型问题
  • AMD Ryzen硬件调试终极指南:掌握SMUDebugTool的5个实战技巧
  • **全同态加密实战:用Python构建安全计算的“黑箱”系统**在现代数据隐私保护日益重要的背景下,**全同态加密(F
  • Qwen3.5-9B-AWQ-4bit实战案例:建筑图纸局部识别+材料规格中文提取
  • 【2026奇点智能技术大会权威解码】:AI代码性能分析的5大反直觉发现,92%工程师尚未掌握
  • LFM2.5-1.2B-Thinking-GGUF实操手册:32K上下文实测边界与长文本截断处理技巧
  • 从按键到启动:Rockchip RK3588双系统切换的硬件与软件协同设计
  • 线上故障排查思路与流程
  • 终极解决方案:如何让Calibre完美保留中文路径,告别拼音目录困扰
  • Python实战:用sklearn的KMeans算法快速找到数据集的质心(附完整代码)
  • 抽象管理化技术中的抽象计划抽象实施抽象验证
  • CVPR 2024最佳学生论文Mip-Splatting保姆级环境配置(避坑NumPy版本冲突)
  • Python文件管理自动化:用glob.iglob()处理海量文件,内存不爆的秘密
  • 从“1+1=2”到“1+1=10”:程序员如何用Python模拟哥德巴赫猜想验证
  • 别再只看准确率了!智能代码生成的可读性=语义保真度×上下文感知度×维护者心智模型匹配度——权威公式首次披露
  • Cortex-M52处理器指令优化与性能提升指南
  • 从Copilot到自主演进系统,代码生成技术跃迁全路径,含Gartner未发布技术成熟度曲线
  • STM32F103C8T6 HAL库驱动HC-SR04避坑指南:双通道输入捕获如何避免溢出和负值?
  • 为什么OpenAI、DeepMind、中科院脑智卓越中心同时缺席2026奇点大会主论坛?(意识伦理红线白皮书内部版泄露)
  • 别再死记硬背了!用‘点火公式’Wallis快速搞定高次幂三角积分(附Python验证脚本)
  • 从霍尔信号到单片机引脚:一份被忽略的FOC硬件“避坑”清单(含三极管电平转换与RC滤波实战)
  • ‌学工平台厂家怎么选?这几个关键点别忽视
  • 【2024代码质量生死线】:为什么83%团队误判AI生成代码覆盖率?3个被忽略的Instrumentation级缺陷
  • jQuery 效果 - 滑动
  • Multi-Agent 商业化瓶颈突破:如何解决客户付费意愿低的问题?
  • 别再只调功率了!SX1262射频PA/LNA寄存器配置实战,让你的LoRa终端续航翻倍
  • UOS系统装LibreOffice总报错?实测解决‘权限不足’和‘应用商店安装失败’的3种方法
  • 从零搭建你的Python量化工具箱(一):手把手复现同花顺MACD与RSI,附完整代码与数据验证
  • Golang reflect反射怎么用_Golang反射教程【通俗】
  • 【优化布置】粒子群算法求解分布式发电机布置的优化问题【含Matlab源码 15354期】