【问题标题】:Check for first or last sibling with class in table row (jQuery)检查表行中的第一个或最后一个兄弟姐妹(jQuery)
【发布时间】:2021-12-06 04:08:55
【问题描述】:

这让我忙了几天。如何检测<tr> 中的第一个或最后一个<td>,类名为“is”,然后将此类更改为“isf”(第一个)或“is”(最后一个),保持中间“is” " 类?

到目前为止,我已经使用 jQuery 得到了这个,但没有任何反应:

$( document ).ready(function() {
  if ($("td.is").prevAll("td.is") = null) {
    $("td.is").toggleClass('is isf');
  } else if ($("td.is").nextAll("td.is") = null) {
    $("td.is").toggleClass('is isl');
  }
});

.prevAll() 更改为.prev() 对我来说不起作用。我在不同的单元格上有多个带有“is”类的表格行。这是表格行的样子:

<tr class="row-months">
  <td class="cell-month cell-jan jan1"></td>
  <td class="cell-month cell-jan jan2"></td>
  <td class="cell-month cell-feb feb1"></td>
  <td class="cell-month cell-feb feb2"></td>
  <td class="cell-month cell-mar mar1"></td>
  <td class="cell-month cell-mar mar2 is"></td> <!-- FIRST "is" class in row, change "is" to "isf" -->
  <td class="cell-month cell-apr apr1 is"></td>
  <td class="cell-month cell-apr apr2 is"></td>
  <td class="cell-month cell-may may1 is"></td>
  <td class="cell-month cell-may may2 is"></td>
  <td class="cell-month cell-jun jun1 is"></td>
  <td class="cell-month cell-jun jun2 is"></td>
  <td class="cell-month cell-jul jul1 is"></td>
  <td class="cell-month cell-jul jul2 is"></td>
  <td class="cell-month cell-aug aug1 is"></td> <!-- LAST "is" class in row, change "is" to "isl" -->
  <td class="cell-month cell-aug aug2"></td>
  <td class="cell-month cell-sep sep1"></td>
  <td class="cell-month cell-sep sep2"></td>
  <td class="cell-month cell-oct oct1"></td>
  <td class="cell-month cell-oct oct2"></td>
  <td class="cell-month cell-nov nov1"></td>
  <td class="cell-month cell-nov nov2"></td>
  <td class="cell-month cell-dec dec1"></td>
  <td class="cell-month cell-dec dec2"></td>
</tr>

【问题讨论】:

    标签: jquery html-table classname


    【解决方案1】:

    要实现这一点,您可以遍历每个 tr 并使用 :first:last 选择器检索相关的 .is 元素并更新它们的类:

    $('.row-months').each((i, el) => {
      $(el).find('.is:first').toggleClass('is isf');
      $(el).find('.is:last').toggleClass('is isl');
    });
    td { 
      width: 30px; 
      vertical-align: top;
    }
    .is { color: #CCC; }
    .isf { color: #0C0; }
    .isl { color: #C00; }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <table>
      <tr class="row-months">
        <td class="cell-month cell-jan jan1">jan1</td>
        <td class="cell-month cell-jan jan2">jan2</td>
        <td class="cell-month cell-feb feb1">feb1</td>
        <td class="cell-month cell-feb feb2">feb2</td>
        <td class="cell-month cell-mar mar1">mar1</td>
        <td class="cell-month cell-mar mar2 is">mar2 is</td>
        <td class="cell-month cell-apr apr1 is">apr1 is</td>
        <td class="cell-month cell-apr apr2 is">apr2 is</td>
        <td class="cell-month cell-may may1 is">may1 is</td>
        <td class="cell-month cell-may may2 is">may2 is</td>
        <td class="cell-month cell-jun jun1 is">jun1 is</td>
        <td class="cell-month cell-jun jun2 is">jun2 is</td>
        <td class="cell-month cell-jul jul1 is">jul1 is</td>
        <td class="cell-month cell-jul jul2 is">jul2 is</td>
        <td class="cell-month cell-aug aug1 is">aug1 is</td>
        <td class="cell-month cell-aug aug2">aug2</td>
        <td class="cell-month cell-sep sep1">sep1</td>
        <td class="cell-month cell-sep sep2">sep2</td>
        <td class="cell-month cell-oct oct1">oct1</td>
        <td class="cell-month cell-oct oct2">oct2</td>
        <td class="cell-month cell-nov nov1">nov1</td>
        <td class="cell-month cell-nov nov2">nov2</td>
        <td class="cell-month cell-dec dec1">dec1</td>
        <td class="cell-month cell-dec dec2">dec2</td>
      </tr>
      <tr class="row-months">
        <td class="cell-month cell-jan jan1">jan1</td>
        <td class="cell-month cell-jan jan2">jan2</td>
        <td class="cell-month cell-feb feb1">feb1</td>
        <td class="cell-month cell-feb feb2">feb2</td>
        <td class="cell-month cell-mar mar1">mar1</td>
        <td class="cell-month cell-mar mar2">mar2</td>
        <td class="cell-month cell-apr apr1">apr1</td>
        <td class="cell-month cell-apr apr2">apr2</td>
        <td class="cell-month cell-may may1">may1</td>
        <td class="cell-month cell-may may2">may2</td>
        <td class="cell-month cell-jun jun1">jun1</td>
        <td class="cell-month cell-jun jun2">jun2</td>
        <td class="cell-month cell-jul jul1 is">jul1 is</td>
        <td class="cell-month cell-jul jul2 is">jul2 is</td>
        <td class="cell-month cell-aug aug1 is">aug1 is</td>
        <td class="cell-month cell-aug aug2 is">aug2 is</td>
        <td class="cell-month cell-sep sep1 is">sep1 is</td>
        <td class="cell-month cell-sep sep2 is">sep2 is</td>
        <td class="cell-month cell-oct oct1">oct1</td>
        <td class="cell-month cell-oct oct2">oct2</td>
        <td class="cell-month cell-nov nov1">nov1</td>
        <td class="cell-month cell-nov nov2">nov2</td>
        <td class="cell-month cell-dec dec1">dec1</td>
        <td class="cell-month cell-dec dec2">dec2</td>
      </tr>
    </table>

    【讨论】:

    • 完美,非常感谢!虽然我对此有最后一个问题......如果一个表格行有多个第一个和最后一个,我该怎么办?意味着表格单元格看起来像这样 [o][x][x][x][o][o][x][x][x][x][o][o] 其中 'x' 包含类名和 'o' 没有?
    • 对于 first,您可以使用 css .cell-month:not(.is) + .cell-month.is { color: red; }(因此使用 jquery 选择器)。否则,可能最简单的方法就是循环并存储当前(在下一次迭代中成为先前的)并进行比较。
    • 为了将来,将来的参考,还有(可能)还有::nth-child(1 of .is) 请参阅this question 了解更多信息。
    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 2014-07-12
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多