javascript - 如何在选择单元格时突出显示表格列

标签 javascript jquery html css

<分区>

当用户点击时,我成功地“突出显示”了一个单元格(td 元素)。
不过,我希望整个列都被高亮显示,并且单元格本身略有不同。
我无法完成最后一部分(突出显示整个专栏)。 感谢所有帮助。

期望的结果如下所示:

enter image description here

function handleBlur(event) {
		event.target.contentEditable = false;
	}
	
	document.querySelector('body').addEventListener('click', function(event) {
		if (event.target.tagName.toLowerCase() === 'td') {
			event.target.contentEditable = true;
			event.target.focus();
			event.target.addEventListener("blur", handleBlur);      
    }
	});
table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 500px;
  margin: 50px 0 0 50px;
}

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

table td[contentEditable=true]{
		-webkit-box-shadow: inset 0px 0px 0px 200px rgba(186,210,225,0.51);
		-moz-box-shadow: inset 0px 0px 0px 200px rgba(186,210,225,0.51);
		box-shadow: inset 0px 0px 0px 200px rgba(186,210,225,0.51);
		outline: 3px solid #086AA7;}
<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</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 </td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari </td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>

最佳答案

如今,无需 jQuery,您就可以使用 native DOM api 轻松地做到这一点。

在其父级的子级中找到所选单元格的索引(使用cellIndex),然后迭代cols,并更改相关col的背景列组:

function handleBlur(event) {
  event.target.contentEditable = false;
}

var cols = document.querySelectorAll('col'); // find the cols and cache

document.querySelector('body').addEventListener('click', function(event) {
  var t = event.target;
  if (t.tagName.toLowerCase() !== 'td') {
    return;
  }

  t.contentEditable = true;
  t.focus();
  t.addEventListener("blur", handleBlur);

  var highlightIndex = t.cellIndex; // the index of the clicked item in the row

  cols.forEach(function(col, index) { // iterate the cols
    col.style.background = index === highlightIndex ? 'lightblue' : null; // set the background to the clicked col, remove from others
  });
});
table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 500px;
  margin: 50px 0 0 50px;
}

td,
th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}

table td[contentEditable=true] {
  box-shadow: inset 0px 0px 0px 200px rgba(186, 210, 225, 0.51);
  outline: 3px solid #086AA7;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <colgroup> <!-- add a colgroup with a col item for each column -->
    <col>
    <col>
    <col>
  </colgroup>
  <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</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 </td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari </td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>

关于javascript - 如何在选择单元格时突出显示表格列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46833580/

上一篇:javascript - 用点填充两个文本元素之间的空间

下一篇:html - 制作下拉菜单

相关文章:

php - 如何在另一个 php 脚本中调用定义的函数?

javascript:将 key 从 for 循环传递到另一个函数失败

javascript - Opera HTML5 视频 ReadyState == 2 而不是等于 4

javascript - 获取特定的 div 以查看或滚动到 View

javascript - 有没有办法在添加 div 时在单独的文件中运行函数? [无 jQuery]

Javascript:当用户在浏览器中单击后退按钮时,使 div 保持显示状态 ='block'

javascript - 如何保持这个 Javascript 正则表达式中的间距?

javascript - 从另一个文件访问js函数/类

javascript - 如何使用 Moment.js 将日期验证为指定格式?

带有变量的javascript样式