如何从水平顺序中选择表格中的多个单元格?

时间:2016-09-09 06:39:41

标签: javascript jquery

我想在javascript / jquery的帮助下以水平顺序从HTML表中选择多个单元格,我该怎么做? Code Am引用如下,我有一个简单的HTML表格<tr></tr><td></td>

   $(document).ready(function () {
      if ($('.table').length) {
          var $td = $('.table').find('td');
          var isMouseDown = false;
          var isHighlighted;

          $td.mousedown(function () {
              isMouseDown = true;
              $(this).toggleClass("highlighted");
              isHighlighted = $(this).hasClass("highlighted");
              return false;
          }).mouseenter(function () {
              if (isMouseDown) {
                  $(this).toggleClass("highlighted");
              }
          }).mouseup(function () {
              if (isMouseDown) {
                  $(this).toggleClass("highlighted", isHighlighted);
              }
          }).on("selectstart", function () {
              return false;
          });

          $(document).mouseup(function () {
              isMouseDown = false;
          });
      }
  });

1 个答案:

答案 0 :(得分:1)

这是你需要的吗?

解答:

  • 我使用 mousedown mouseup 为整个身体元素创建两个事件监听器,以便在对整个身体元素进行操作时观察鼠标按钮操作。对于每个第一个 mousedown 事件,我删除了所有 .highlight 类。
  • 当鼠标在 table 上输入 td 时,我正在观看悬停事件。因此,当指针进入 td 对象时,我们可以在 td 中添加一个新的 .highlight 类。

更新:

  • 添加逻辑以仅选择同一行。

&#13;
&#13;
$(document).ready(function () {
  var isMouseDown = false;
  var lastTr = -1;
  
  $('body').mousedown(function() {
    isMouseDown = true;
    $('td').removeClass('highlight');
  })
  .mouseup(function() {
    isMouseDown = false;
  });

  $("table td").hover(function(){
    var ctr = $(this).closest('tr').index();
    lastTr = lastTr === -1 ? ctr : lastTr;
    
    if (isMouseDown)
      if (lastTr !== ctr)
        $('td').removeClass('highlight');
      else
        $(this).addClass("highlight");
    
    lastTr = $(this).closest('tr').index();
  });

  $("table td").click(function(){
    $(this).toggleClass('highlight');
  });
});
&#13;
table {
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: 100%;
}

td, th {
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;
    cursor: pointer;
    background-color: #fff;
}

.highlight {
  background-color: #ccc !important;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<table>
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
  <tr>
    <td>Ernst Handel</td>
    <td>Roland Mendel</td>
    <td>Austria</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>Helen Bennett</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Laughing Bacchus Winecellars</td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari Riuniti</td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>
&#13;
&#13;
&#13;