【问题标题】:How to highlight cells on two different tables that have the same data when hovering?悬停时如何突出显示具有相同数据的两个不同表格上的单元格?
【发布时间】:2019-10-07 03:12:56
【问题描述】:

所以我有两个不同的 HTML 表格,它们的值可能相同,也可能不同。我正在寻找一种方法来突出显示表中具有相同值的单个单元格。例如在下表中,当鼠标悬停在第一个表中的 1 上时,它将突出显示该单元格以及表 2 中所有包含 1 的单元格。

我可以用一些简单的 CSS 突出显示单个单元格,但不知道如何突出显示不同表格上的相应单元格。

<table id="table1" border=1>
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>1</td>
    <td>5</td>
  </tr>
  <tr>
    <td>6</td>
    <td>7</td>
    <td>1</td>
    <td>9</td>
    <td>10</td>
  </td>
</table>

..........

<table id="table2" border=1>
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>1</td>
  </tr>
  <tr>
    <td>6</td>
    <td>7</td>
    <td>8</td>
    <td>9</td>
    <td>1</td>
  </td>
</table>

给定的答案适用于此示例代码,但我希望使用用户输入的表格来实现它,如下所示

<script type="text/javascript">

function generateTable()
{
    var rows1 = document.getElementById('rows1').value;
    var columns1 = document.getElementById('columns1').value;
    var tableBegin = '<table border="1">\n';
    var body = '';

    for(var i=0; i < rows1; i++)
    {
        body += '<tr>';
        for(var j=0; j < columns1; j++)
        {
            body += '<td>';
            body += Math.floor(Math.random()*11);
            body += '</td>'
        }
        body += '</tr>\n';
    }
    var endTable = '</table>';
document.getElementById('firstTable').innerHTML = tableBegin + body + endTable;
}


function generateTable2()
{
    var rows2 = document.getElementById('rows2').value;
    var columns2 = document.getElementById('columns2').value;
    var tableBegin2 = '<table border="1">\n';
    var body2 = '';

    for(var i=0; i < rows2; i++)
    {
        body2 += '<tr>';
        for(var j=0; j < columns2; j++)
        {
            body2 += '<td>';
            body2 += Math.floor(Math.random()*11);
            body2 += '</td>'
        }
        body2 += '</tr>\n';
    }
    var endTable2 = '</table>';
document.getElementById('secondTable').innerHTML = tableBegin2 + body2 + endTable2;
}
</script>    
<form name="makeTable1">
 Table 1<br>
   Rows:    <input type="text" name="rows1" id="rows1"><br>
   Columns: <input type="text" name="columns1" id="columns1"><br><br>

<input name="generate" type="button" value="Generate Table" onclick='generateTable();'/>
</form>


   Table 2<br>
   Rows:    <input type="text" name="rows2" id="rows2"><br>
   Columns: <input type="text" name="columns2" id="columns2"><br>

<form name="makeTable2">

<input name="generate" type="button" value="Generate Table" onclick='generateTable2();'/>
</form>

 <div id="firstTable"></div>

如何修改要在这些表上实施的答案?

【问题讨论】:

  • onmouseover-onmouseout 事件可以帮助您。但是,使用一些行列数据标记单元格可能很有用,例如data-rc="1-2"...
  • @ZorgoZ 你说的这个东西是用js而不是css
  • 请在codepen或codesandbox中添加您的代码给帮助您的人,谢谢
  • @Abal 请不要要求将代码发布到第三方网站,因为这些链接可能会随着时间的推移而失效。可以在 Stack Overflow 问题中插入可运行代码。
  • 好的,所以把你的代码放在这里我们可以看到它的实际效果

标签: javascript jquery html css


【解决方案1】:

你可以尝试这样的事情(假设你可以接受 JQuery):

$(() => { // we need to attach listeners after the dom is ready
  $('td').on('mouseover', (e)=> { // attach handler on TD-s to 'hover' equivalent event
    let the = $(e.currentTarget).text() // get current element text
    $("td").filter((_,x) => $(x).text() == the).addClass('hover') // find all TD-s with matching content and add marker class
  })
  
  $('td').on('mouseout', ()=> { // attach focus lost on TD-s 
    $(`td`).removeClass('hover') // remove marker class from all TD-s
  })
})
.hover {
  background-color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table id="table1" border=1>
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>1</td>
    <td>5</td>
  </tr>
  <tr>
    <td>6</td>
    <td>7</td>
    <td>1</td>
    <td>9</td>
    <td>10</td>
  </tr>
</table>

..........

<table id="table2" border=1>
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>1</td>
  </tr>
  <tr>
    <td>6</td>
    <td>7</td>
    <td>8</td>
    <td>9</td>
    <td>1</td>
  </tr>
</table>

【讨论】:

  • 这有点帮助,但我更多地考虑的是价值,而不是桌子上的位置。因此,如果第一个 1 悬停在第一个表中,第二个表中的所有这些也会突出显示
  • 这个问题没有用 JQuery 标记。此外,好的答案不仅仅是“试试这个”,然后是一些代码。他们解释了问题和解决方案。
  • 亲爱的@ScottMarcus 你是完全正确的。但是 OP确认这是他所期望的结果之后,两者都可以得到很好的满足。
  • 完美,正是我想要的!谢谢一群人!
  • @mojuy11 在这种情况下,请用 JQuery 标记您的问题。
猜你喜欢
  • 1970-01-01
  • 2015-11-03
  • 2020-03-29
  • 2020-08-13
  • 2012-08-08
  • 1970-01-01
  • 2013-08-26
  • 2019-09-26
  • 1970-01-01
相关资源
最近更新 更多