gpt4 book ai didi

javascript - 使用具有行和列跨度的表突出显示单击事件

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:43 25 4
gpt4 key购买 nike

我有一张这样布置的 table :

+-----------------------------------------------------------+
| | H1 | H2 | H3 | H4 | H5 |
| | | | | | |
+-----------------------------------------------------------+
| | | | | | | | | | | |
+-----------------------------------------------------------+
| | | | | | |
| S1 |-------------------------------------------------+
| | | | | | |
+-----------------------------------------------------------+
| | | | | | |
| S2 |-------------------------------------------------+
| | | | | | |
+-----------------------------------------------------------+
| | | | | | |
| S3 |-------------------------------------------------+
| | | | | | |
+-----------------------------------------------------------+

我想帮助实现一种方法来按下任何 S123 单元格(其中有一个 行span) 所有“ sibling ”都将突出显示,就像:

+-----------------------------------------------------------+
| |XXXXXXXXX|XXXXXXXXX|XXXXXXXXX|XXXXXXXXX|XXXXXXXXX|
| S3 |-------------------------------------------------+
| |XXXXXXXXX|XXXXXXXXX|XXXXXXXXX|XXXXXXXXX|XXXXXXXXX|
+-----------------------------------------------------------+
^
|
CLICKED HERE

如果可能,我也想对我的 H1 -> H5 列执行此操作。

我在看 this ,但我不能改变它,但我不能很好地使用 javascript/jquery,只能“破坏”它的当前功能。

警告:长片段由于表格的复杂性

$(document).ready(function() {
$('.custTitle').click(function() {
$(this).find('td').css("background-color", "red");
});
});
.makeInputWidth {
width: 5em;
}
.rotateText {
-webkit-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-o-transform: rotate(270deg);
transform: rotate(270deg);
height: 7em;
width: 6em;
}
.title {
background-color: #808080;
}
table tr td {
padding: 0;
}
table tr {
padding: 0;
border: 0;
}
/* .qwerty{
background-color:transparent;
border: 1px solid transparent;
}*/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="thistable">
<tr>
<th>LOCATION</th>
<th>&nbsp;&nbsp;</th>
<th colspan="2">H1</th>
<th colspan="3">H2</th>
<th>H3</th>
<th colspan="2">H4</th>
<th></th>
</tr>
<tr>
<th>PRODUCT</th>
<th>&nbsp;&nbsp;</th>
<th class="rotateText">S1</th>
<th class="rotateText">S2</th>
<th class="rotateText">S3</th>
<th class="rotateText">S4</th>
<th class="rotateText">S5</th>
<th class="rotateText">S6</th>
<th class="rotateText">S7</th>
<th class="rotateText">S8</th>
<th></th>
</tr>
<tr>
<th>Product id</th>
<th>&nbsp;&nbsp;</th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th></th>
</tr>
<tr>
<th colspan="11">&nbsp;</tr>
<tr>
<th>Customers</th>
<th colspan="10">
<hr />
</tr>
<tr class="custTitle">
<th rowspan="2" class="title">Q1</th>
<th>&nbsp;&nbsp;</th>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<th>THIS</th>
</tr>
<tr>
<th>&nbsp;&nbsp;</th>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<th>TEST</th>
</tr>

<tr>
<th colspan="11">
<hr />
</th>
</tr>

<tr class="custTitle">
<th rowspan="2" class="title">Q2</th>
<th>&nbsp;&nbsp;</th>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<th>THIS</th>
</tr>
<tr>
<th>&nbsp;&nbsp;</th>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<th>TEST</th>
</tr>

<tr>
<th colspan="11">
<hr />
</th>
</tr>

<tr class="custTitle">
<th rowspan="2" class="title">Q3</th>
<th>&nbsp;&nbsp;</th>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<td>
<input type="text" class="makeInputWidth qwerty" />
</td>
<th>THIS</th>
</tr>
<tr>
<th>&nbsp;&nbsp;</th>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<th>TEST</th>
</tr>

<tr>
<th colspan="11">
<hr />
</th>
</tr>





</table>

有人会:

  • (A) 理解我在说什么,并且
  • (B)能够实现这个想法吗?

这是一个可行的 JSFIDDLE

编辑历史

最佳答案

选择行:您需要选择包含被单击单元格的 TR 元素,如果单元格具有 rowspan,则还要选择下一个兄弟元素。您可以使用 jQuery.nextAll() , jQuery.addBack()jQuery.slice()合起来如下:

$(function() {
$(".title1").on("click", function() {
var rowspan = +$(this).attr("rowspan") || 1;
$(this).closest("tr").nextAll().addBack().slice(0, rowspan).find("th, td").toggleClass("test1");
});
$(".title2").on("click", function() {
var index1 = 0,
index2 = +$(this).attr("colspan") || 1;
$(this).prevAll().each(function() {
var colspan = +$(this).attr("colspan") || 1;
index1 += colspan;
index2 += colspan;
});
$("tr:gt(2)").find("th, td").filter(function() {
var index = $(this).index();
// using heuristic, sorry
if ($(this).closest("tr").hasClass("custTitle") === false) {
index += 1;
}
return index >= index1 && index < index2;
}).toggleClass("test2");
});
});
.title1 {
background-color: #808080;
}
.title2 {
background-color: #808080;
}
.test1 {
background: #F99;
}
.test2 {
background: #99F;
}
.test1.test2 {
background: #F9F;
}
input {
width: 5em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table id="thistable" border="1" cellpadding="2" cellspacing="0">
<tr>
<th>LOCATION</th>
<th></th>
<th class="title2" colspan="2">H1</th>
<th class="title2" colspan="3">H2</th>
<th class="title2">H3</th>
<th class="title2" colspan="2">H4</th>
<th></th>
</tr>
<tr>
<th>PRODUCT</th>
<th></th>
<th class="rotateText">S1</th>
<th class="rotateText">S2</th>
<th class="rotateText">S3</th>
<th class="rotateText">S4</th>
<th class="rotateText">S5</th>
<th class="rotateText">S6</th>
<th class="rotateText">S7</th>
<th class="rotateText">S8</th>
<th></th>
</tr>
<tr>
<th>Product id</th>
<th></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th></th>
</tr>
<tr class="custTitle">
<th class="title1" rowspan="2">Q1</th>
<th></th>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<th>THIS</th>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<th>TEST</th>
</tr>
<tr class="custTitle">
<th class="title1" rowspan="2">Q2</th>
<th></th>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<th>THIS</th>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<th>TEST</th>
</tr>
<tr class="custTitle">
<th class="title1" rowspan="2">Q3</th>
<th></th>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<td><input type="text" class="makeInputWidth qwerty" /></td>
<th>THIS</th>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<th>TEST</th>
</tr>
</table>

关于javascript - 使用具有行和列跨度的表突出显示单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27271548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com