使用jQuery检测表格行中带有is类的首个/末尾<td>元素并修改类名
解决jQuery修改表格行首尾特定类单元格的问题
我来帮你搞定这个困扰好几天的问题!你的需求很明确:给每一行表格里第一个带is类的<td>把类名从is改成isf,最后一个带is类的<td>改成isl,中间的保持原样。咱们先拆解下你原有代码的问题,再给出正确实现。
原有代码的问题分析
- 语法错误:用了赋值符号
=而不是判断相等的==/===,这会导致逻辑完全走不通 - 全局处理而非逐行处理:直接全局查找
td.is会把所有行的目标单元格混在一起,无法区分每行的首尾 - 错误的空值判断:
prevAll("td.is")返回的是jQuery对象,永远不会等于null,判断是否为空应该用.length === 0
正确实现代码
$(document).ready(function() { // 遍历每一行目标表格(这里用.row-months,若要所有行就改成$("tr")) $("tr.row-months").each(function() { // 获取当前行内所有带is类的td元素 const $isCells = $(this).find("td.is"); // 确保当前行存在目标单元格才执行操作 if ($isCells.length > 0) { // 处理第一个is类单元格:移除is,添加isf $isCells.first().removeClass("is").addClass("isf"); // 处理最后一个is类单元格:移除is,添加isl $isCells.last().removeClass("is").addClass("isl"); } }); });
代码说明
.each():逐行遍历表格,保证每行的首尾单元格独立处理,不会互相干扰.find("td.is"):只在当前行内查找带is类的单元格,精准定位当前行的目标元素.first()/.last():直接获取目标集合里的首尾元素,操作简单直接.removeClass()+.addClass():明确替换类名,比toggleClass()更可控(toggle会根据类的存在状态切换,这里我们是确定要替换,所以明确操作更安全)
这样处理后,你示例中的表格行里,mar2会变成isf类,aug1会变成isl类,中间的apr1、apr2等is类会保持不变,完全符合你的需求~
内容的提问来源于stack exchange,提问作者user7862339
相关产品推荐
相关产品推荐

