【问题标题】:Javascript Change TD bgColor onClickJavascript 更改 TD bgColor onClick
【发布时间】:2017-06-24 16:11:55
【问题描述】:

我有这段代码,当您单击表格单元格时,它会将颜色切换为红色,同时关闭行中已经为红色的任何单元格,以便一行中只有一个单元格是红色的。 这也发生在第二行,因此该行中只有一个单元格是红色的。
我想要发生的是整个表格中只有一个单元格是红色的,这将是一个 13 行的表格最终只有一个细胞是红色的。对此的任何帮助表示赞赏。

var el
function togCell(col){
    if (typeof event!=='undefined')
        el=event.srcElement
        for (var i = 0; i < el.parentNode.cells.length; i++)
            el.parentNode.cells[i].style.backgroundColor=''
        el.style.backgroundColor=col
}
if (window.addEventListener)
    window.addEventListener('click', function(e){el=e.target}, true)
table {
    cursor:text;
}
td {
    font-size:14;
    cursor:default;
}
<table border="1" cellpadding="8" cellspacing="2">
    <tr style="background-color:white;">
      <td onclick="togCell('red')">AA</td>
      <td onclick="togCell('red')">AKs</td>
      <td onclick="togCell('red')">AQs</td>
      <td onclick="togCell('red')">AJs</td>
      <td onclick="togCell('red')">ATs</td>
      <td onclick="togCell('red')">A9s</td>
      <td onclick="togCell('red')">A8s</td>
      <td onclick="togCell('red')">A7s</td>
      <td onclick="togCell('red')">A6s</td>
      <td onclick="togCell('red')">A5s</td>
      <td onclick="togCell('red')">A4s</td>
      <td onclick="togCell('red')">A3s</td>
      <td onclick="togCell('red')">A2s</td>
  </tr>  
  <tr style="background-color:white;">
      <td onclick="togCell('red')">AKo</td>
      <td onclick="togCell('red')">KK</td>
      <td onclick="togCell('red')">KQs</td>
      <td onclick="togCell('red')">KJs</td>
      <td onclick="togCell('red')">KTs</td>
      <td onclick="togCell('red')">K9s</td>
      <td onclick="togCell('red')">K8S</td>
      <td onclick="togCell('red')">K7s</td>
      <td onclick="togCell('red')">K6s</td>
      <td onclick="togCell('red')">K5s</td>
      <td onclick="togCell('red')">K4s</td>
      <td onclick="togCell('red')">K3s</td>
      <td onclick="togCell('red')">K2s</td>
  </tr>
</table>

【问题讨论】:

  • 任何可行的方法。

标签: javascript html onclick html-table


【解决方案1】:

希望这可行...唯一的事情是我用 jQuery 完成了它。如果您想要使用纯 Javascript,请告诉我,一段时间后,我也会为此分享 sn-p。

$(function(){
	$(".row td.column").on("click",function(){
  	if($(this).parent().children('td.active').length > 0) {
    	$(this).siblings().removeClass('active');
    }
    $(this).addClass('active')
  })
});
table tr td{
  border: 1px solid red;
}
.active{
  background-color: red;
}
<table class="container">
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
  <tr class="row">
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
    <td class="column">ABC</td>
  </tr>
</table>

【讨论】:

    【解决方案2】:

    首先我对你的 HTML 做了一些改动:

    然后我添加了一个名为 red 的新 CSS 类:

    最后我做了一个只保留一个红细胞的JQuery函数:

    (function togCell(){
      $('td').click(function(e){
        $('td').removeClass('red');
        $(this).addClass('red');
        
      });
      
    })();
    table {
    cursor:text;
    }
    td {
    font-size:14;
    cursor:default;
    }
    .red {
      background-color: red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table border="1" cellpadding="8" cellspacing="2">
    <tr style="background-color:white;">
      <td  id="1">AA</td>
      <td  id="2">AKs</td>
      <td  id="3">AQs</td>
      <td  id="4">AJs</td>
      <td  id="5">ATs</td>
      <td  id="6">A9s</td>
      <td  id="7">A8s</td>
      <td  id="8">A7s</td>
      <td  id="9">A6s</td>
      <td  id="10">A5s</td>
      <td  id="11">A4s</td>
      <td  id="12">A3s</td>
      <td  id="13">A2s</td>
      </tr>  
      <tr style="background-color:white;">
      <td  id="14">AKo</td>
      <td  id="15">KK</td>
      <td  id="16">KQs</td>
      <td  id="17">KJs</td>
      <td  id="18">KTs</td>
      <td  id="19">K9s</td>
      <td  id="20">K8S</td>
      <td  id="21">K7s</td>
      <td  id="22">K6s</td>
      <td  id="22">K5s</td>
      <td  id="23">K4s</td>
      <td  id="24">K3s</td>
      <td  id="25">K2s</td>
      </tr>

    在 liveweave 中测试。

    【讨论】:

      【解决方案3】:

      如果你只想使用jquery,你要做的就是

      $('td').on('click', function(){
      
          $('td').css('background-color', '');
          $(this).css('background-color', 'red');
      
      })
      

      从 html 中删除 onclick="togCell('red')

      或者

      在你的代码中

      var el
      function togCell(col) {
        if (typeof event !== 'undefined')
          el = event.srcElement
        $('td').css('background-color', '') // Using jQuery. Only this line is changed
        el.style.backgroundColor = col
      }
      if (window.addEventListener)
        window.addEventListener('click', function(e) {
          el = e.target
        }, true)
      

      或者

      使用纯 JavaScript

      var el
      function togCell(col) {
        if (typeof event !== 'undefined')
          el = event.srcElement
        elements = document.getElementsByTagName('td');
        for (var i = 0; i < elements.length; i++) {
          elements[i].style.backgroundColor = "";
        }
        el.style.backgroundColor = col
      }
      if (window.addEventListener)
        window.addEventListener('click', function(e) {
          el = e.target
        }, true)
      

      $('td').on('click', function() {
      
        $('td').css('background-color', '');
        $(this).css('background-color', 'red');
      
      })
      
      function togCell() {}
      table {
        cursor: text;
      }
      td {
        font-size: 14;
        cursor: default;
      }
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <table border="1" cellpadding="8" cellspacing="2">
        <tr style="background-color:white;">
          <td onclick="togCell('red')">AA</td>
          <td onclick="togCell('red')">AKs</td>
          <td onclick="togCell('red')">AQs</td>
          <td onclick="togCell('red')">AJs</td>
          <td onclick="togCell('red')">ATs</td>
          <td onclick="togCell('red')">A9s</td>
          <td onclick="togCell('red')">A8s</td>
          <td onclick="togCell('red')">A7s</td>
          <td onclick="togCell('red')">A6s</td>
          <td onclick="togCell('red')">A5s</td>
          <td onclick="togCell('red')">A4s</td>
          <td onclick="togCell('red')">A3s</td>
          <td onclick="togCell('red')">A2s</td>
        </tr>
        <tr style="background-color:white;">
          <td onclick="togCell('red')">AKo</td>
          <td onclick="togCell('red')">KK</td>
          <td onclick="togCell('red')">KQs</td>
          <td onclick="togCell('red')">KJs</td>
          <td onclick="togCell('red')">KTs</td>
          <td onclick="togCell('red')">K9s</td>
          <td onclick="togCell('red')">K8S</td>
          <td onclick="togCell('red')">K7s</td>
          <td onclick="togCell('red')">K6s</td>
          <td onclick="togCell('red')">K5s</td>
          <td onclick="togCell('red')">K4s</td>
          <td onclick="togCell('red')">K3s</td>
          <td onclick="togCell('red')">K2s</td>
        </tr>
      
      </table>

      【讨论】:

        【解决方案4】:

        这是最有效的解决方案,因为它在表格级别使用单个委托事件(而不是每个表格单元格上的几十个事件)。此解决方案还使用实时HTMLCollection,无需重新检查当前选择的内容。

        另外请注意,您应该避免直接使用 CSS 样式,考虑 CSS 类,这是更灵活的方法(假设您想更改选定单元格上的几个 CSS 道具,而不仅仅是背景)。

        检查一下:

        var table = document.querySelector('#table')
        var selectedCells = table.getElementsByClassName('selected')
        
        table.addEventListener('click', function(e) {
          var td = e.target
          
          if (td.tagName !== 'TD') {
            return
          }
          
          if (selectedCells.length) {
            selectedCells[0].className = ''    
          }
        
          td.className = 'selected'
        })
        table {
          cursor: text;
        }
        tr {
          background-color:white;
        }
        td {
          font-size: 14;
          cursor: default;
        }
        
        td.selected {
          background-color: red;
        }
        <table border="1" cellpadding="8" cellspacing="2" id="table">
          <tr>
            <td>AA</td>
            <td>AKs</td>
            <td>AQs</td>
            <td>AJs</td>
            <td>ATs</td>
            <td>A9s</td>
            <td>A8s</td>
            <td>A7s</td>
            <td>A6s</td>
            <td>A5s</td>
            <td>A4s</td>
            <td>A3s</td>
            <td>A2s</td>
          </tr>
          <tr>
            <td>AKo</td>
            <td>KK</td>
            <td>KQs</td>
            <td>KJs</td>
            <td>KTs</td>
            <td>K9s</td>
            <td>K8S</td>
            <td>K7s</td>
            <td>K6s</td>
            <td>K5s</td>
            <td>K4s</td>
            <td>K3s</td>
            <td>K2s</td>
          </tr>
        </table>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-26
          • 2021-10-24
          • 2018-09-04
          相关资源
          最近更新 更多