Как получить колонку из таблицы и ограничить число активируемых ячеек в ней

Необходимо сделать так, чтобы в одной колонке нельзя было активировать более пяти ячеек. я пытаюсь получить количество td.active из колонки, но выходит какая-то дичь)

let table = document.querySelector("table");

table.addEventListener("click", ({ target }) => {
  if (target.tagName == "TD") {
    let trs = document.querySelectorAll("tr");
    for (let tr of trs) {
      let cols = tr.querySelectorAll("td.active");
      console.log(cols.length)
      if (cols.length <= 5) {
        target.classList.add("active");
      }
      else target.classList.remove('active')
    }
  }
});
 table {
    width: 500px;
    height: 500px;
    margin-bottom: 20px;
    /* border: 1px solid black; */
    /* border-collapse: collapse;  */
  }
  table tr {
    font-weight: bold;
    padding: 5px;
    border: 1px
 solid black;
  }
  table td {
    border: 1px solid black;
    padding: 5px;
    height: 40px;
    width: 40px;

  }
: 5px;
    border: 
  .active{
    background-color: aqua;
    pointer-events: none;

  }
  .diactive{
    pointer-events: none;
  } 
<table>
      <tr>
        <td data-col="0"></td>
        <td data-col="1"></td>
        <td data-col="2"></td>
        <td data-col="3"></td>
        <td data-col="4"></td>
        <td data-col="5"></td>
      </tr>
      <tr>
        <td data-col="6"></td>
        <td data-col="7"></td>
        <td data-col="8"></td>
        <td data-col="9"></td>
        <td data-col="10"></td>
        <td data-col="11"></td>
      </tr>
      <tr>
        <td data-col="12"></td>
        <td data-col="13"></td>
        <td data-col="14"></td>
        <td data-col="15"></td>
        <td data-col="16"></td>
        <td data-col="17"></td>
      </tr>
      <tr>
        <td data-col="18"></td>
        <td data-col="19"></td>
        <td data-col="20"></td>
        <td data-col="21"></td>
        <td data-col="22"></td>
        <td data-col="23"></td>
      </tr>
      <tr>
        <td data-col="24"></td>
        <td data-col="25"></td>
        <td data-col="26"></td>
        <td data-col="27"></td>
        <td data-col="28"></td>
        <td data-col="29"></td>
      </tr>
      <tr>
        <td data-col="30"></td>
        <td data-col="31"></td>
        <td data-col="32"></td>
        <td data-col="33"></td>
        <td data-col="34"></td>
        <td data-col="35"></td>v
      </tr>
      
    </table>


Ответы (1 шт):

Автор решения: ksa

Необходимо сделать так, чтобы в одной колонке нельзя было активировать более пяти ячеек.

Такое можно сделать, например, вот так...

const table = document.querySelector("table");
const max = 5

table.addEventListener("click", e => {
  const o = e.target.closest('td')
  if (!o) return
  const oc = o.classList
  if (oc.contains('active')) {
    oc.remove('active')
    return
  }
  let n = [...o.closest('tr').querySelectorAll('td')].indexOf(o)
  n = table.querySelectorAll(`tr td:nth-child(${n + 1}).active`).length
  if (n < max) oc.add('active')
});
table {
  width: 500px;
  height: 500px;
  margin-bottom: 20px;
}

table tr {
  font-weight: bold;
  padding: 5px;
  border: 1px solid black;
}

table td {
  border: 1px solid black;
  padding: 5px;
  height: 40px;
  width: 40px;

}

.active {
  background-color: aqua;
  /*pointer-events: none;*/
}
.diactive {
  pointer-events: none;
}
<table>
  <tr>
    <td data-col="0"></td>
    <td data-col="1"></td>
    <td data-col="2"></td>
    <td data-col="3"></td>
    <td data-col="4"></td>
    <td data-col="5"></td>
  </tr>
  <tr>
    <td data-col="6"></td>
    <td data-col="7"></td>
    <td data-col="8"></td>
    <td data-col="9"></td>
    <td data-col="10"></td>
    <td data-col="11"></td>
  </tr>
  <tr>
    <td data-col="12"></td>
    <td data-col="13"></td>
    <td data-col="14"></td>
    <td data-col="15"></td>
    <td data-col="16"></td>
    <td data-col="17"></td>
  </tr>
  <tr>
    <td data-col="18"></td>
    <td data-col="19"></td>
    <td data-col="20"></td>
    <td data-col="21"></td>
    <td data-col="22"></td>
    <td data-col="23"></td>
  </tr>
  <tr>
    <td data-col="24"></td>
    <td data-col="25"></td>
    <td data-col="26"></td>
    <td data-col="27"></td>
    <td data-col="28"></td>
    <td data-col="29"></td>
  </tr>
  <tr>
    <td data-col="30"></td>
    <td data-col="31"></td>
    <td data-col="32"></td>
    <td data-col="33"></td>
    <td data-col="34"></td>
    <td data-col="35"></td>v
  </tr>

</table>

→ Ссылка