jQuery 中的兄弟姐妹 () 不适用于表 tr 元素



我有一个大的表,主要的tr元素和第二个我需要隐藏/显示,而不是全部隐藏在一起但是这个js代码不起作用

很抱歉用了俄语)))这并不重要,我确定

$(".tr-main").click(function() {
$(this).siblings(".tr-second").slideToggle("slow");
});
.tr-second {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="tableizer-table">
<thead>
<tr class="tableizer-firstrow">
<th> Процедуры</th>
<th>Цена</th>
<th>Ед.</th>
</tr>
</thead>
<tbody>
<div class="parent">
<tr class="tr-main">
<td>Blanc Lisse Кубические токи</td>
<td></td>
<td></td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - 10 мин</td>
<td>4 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - 30 мин</td>
<td>6 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - дополнительно к процедуре</td>
<td>4 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - мгновенный лифтинг</td>
<td>6 000,00 руб</td>
<td>шт</td>
</tr>
</div>
<div class="parent">
<tr class="tr-main">
<td>Candela Удаление пор</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr class="tr-second">
<td>Candela Удаление пор - нос</td>
<td>7 560,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Candela Удаление пор - Т-зона</td>
<td>15 120,00 руб</td>
<td>шт</td>
</tr>
</div>
<div class="parent">
<tr class="tr-main">
<td>Endospheres Therapy (Эндосфера)</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr class="tr-second">
<td>Endospheres Therapy (Эндосфера) Тело 1 процедура</td>
<td>8 500,00 руб</td>
<td>шт</td>
</tr>
</div>
</tbody>
</table>

如前所述,div不是tbody的有效子,因此您的.siblings选择整个表中的所有.tr-second行。

如果你用div在表上执行element inspect,你会看到它们都在表外。

相反,你可以用<tbody>元素替换你的divs,从而按预期分组tr-main/tr-seconds(不改变你的js)

$(".tr-main").click(function() {
$(this).siblings(".tr-second").slideToggle("slow");
});
.tr-second {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="tableizer-table">
<thead>
<tr class="tableizer-firstrow"><th>        Процедуры</th><th>Цена</th><th>Ед.</th></tr>
</thead>
<tbody>
<tr class="tr-main"><td>Blanc Lisse Кубические токи</td><td></td><td></td></tr>
<tr class="tr-second"><td>Blanc Lisse Кубические токи - 10 мин</td><td>4 000,00 руб</td><td>шт</td></tr>
<tr class="tr-second"><td>Blanc Lisse Кубические токи - 30 мин</td><td>6 000,00 руб</td><td>шт</td></tr>
<tr class="tr-second"><td>Blanc Lisse Кубические токи - дополнительно к процедуре</td><td>4 000,00 руб</td><td>шт</td></tr>
<tr class="tr-second"><td>Blanc Lisse Кубические токи - мгновенный лифтинг</td><td>6 000,00 руб</td><td>шт</td></tr>
</tbody>
<tbody>
<tr class="tr-main"><td>Candela Удаление пор</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr class="tr-second"><td>Candela Удаление пор - нос</td><td>7 560,00 руб</td><td>шт</td></tr>
<tr class="tr-second"><td>Candela Удаление пор - Т-зона</td><td>15 120,00 руб</td><td>шт</td></tr>
</tbody>
<tbody>
<tr class="tr-main"><td>Endospheres Therapy (Эндосфера)</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr class="tr-second"><td>Endospheres Therapy (Эндосфера) Тело 1 процедура</td><td>8 500,00 руб</td><td>шт</td></tr>
</tbody>
</table>

请注意(至少在Chrome中)你不能slidetr所以你的.slideToggle是一样的.toggle,但在隐藏上有延迟;但这是另一个问题。

根据我的评论,您不应该使用<div>元素作为<tbody>的直接后代(或,参见评论中的辩论),因为这在语义上是无效的。反正你也不需要这些了。

您可以使用.nextUntil(),它允许您匹配.tr-main元素的兄弟元素,直到下一个,即:$(this).nextUntil(".tr-main")。参见下面的概念验证示例:

$(".tr-main").click(function() {
$(this).nextUntil(".tr-main").toggle();
});
.tr-second {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="tableizer-table">
<thead>
<tr class="tableizer-firstrow">
<th> Процедуры</th>
<th>Цена</th>
<th>Ед.</th>
</tr>
</thead>
<tbody>
<tr class="tr-main">
<td>Blanc Lisse Кубические токи</td>
<td></td>
<td></td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - 10 мин</td>
<td>4 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - 30 мин</td>
<td>6 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - дополнительно к процедуре</td>
<td>4 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - мгновенный лифтинг</td>
<td>6 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-main">
<td>Candela Удаление пор</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr class="tr-second">
<td>Candela Удаление пор - нос</td>
<td>7 560,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Candela Удаление пор - Т-зона</td>
<td>15 120,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-main">
<td>Endospheres Therapy (Эндосфера)</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr class="tr-second">
<td>Endospheres Therapy (Эндосфера) Тело 1 процедура</td>
<td>8 500,00 руб</td>
<td>шт</td>
</tr>
</tbody>
</table>

工作完全符合您的要求。更稳定和响应。
运行代码片段:

$(".tr-main").click(function () {
$(this).nextUntil(".tr-main").toggle(200);
});
.tr-second{
background:yellow;
}
.tr-main{
background:red;
cursor:pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="tableizer-table" border>
<thead>
<tr class="tableizer-firstrow">
<th>Процедуры</th>
<th>Цена</th>
<th>Ед.</th>
</tr>
</thead>
<tbody>
<tr class="tr-main">
<td>Blanc Lisse Кубические токи</td>
<td></td>
<td></td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - 10 мин</td>
<td>4 000,00 руб</td><td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - 30 мин</td>
<td>6 000,00 руб</td><td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - дополнительно к процедуре</td>
<td>4 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-second">
<td>Blanc Lisse Кубические токи - мгновенный лифтинг</td><td>6 000,00 руб</td>
<td>шт</td>
</tr>
<tr class="tr-main">
<td>Candela Удаление пор</td>
<td>&nbsp;</td><td>&nbsp;</td>
</tr>
<tr class="tr-second">
<td>Candela Удаление пор - нос</td>
<td>7 560,00 руб</td><td>шт</td>
</tr>
<tr class="tr-second">
<td>Candela Удаление пор - Т-зона</td>
<td>15 120,00 руб</td><td>шт</td>
</tr>
<tr class="tr-main">
<td>Endospheres Therapy (Эндосфера)</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr class="tr-second">
<td>Endospheres Therapy (Эндосфера) Тело 1 процедура</td>
<td>8 500,00 руб</td><td>шт</td>
</tr>
</tbody>
</table>

最新更新