当点击某些元素时,我想在该元素的父亲之前的兄弟(不是全部,只有一个)上切换一个类,其中兄弟姐妹没有特定的类( ' item')已经。
HTML:
<tr id="product1">
<td>Product</td>
<td>Text</td>
</tr>
<tr class="item" id="sku1">
<td>SKU</td>
<td class="valueButton">Button</td>
<td>Text</td>
</tr>
<tr id="product2">
<td>Product</td>
<td>Text</td>
</tr>
<tr class="item" id="sku2">
<td>SKU</td>
<td class="valueButton">Button</td>
<td>Text</td>
</tr>
<tr class="item" id="sku3">
<td>SKU</td>
<td class="valueButton">Button</td>
<td>Text</td>
</tr>
JS:
$(document).on({
click: function () {
$('tr', $(this).parent().prev(":not('.item')")).toggleClass('blueChecked');
}
}, "tr.item td:not('.valueButton')");
答案 0 :(得分:3)
使用.prevAll()
并保留第一个..
$(this).parent().prevAll(':not(.item)').first().toggleClass('blueChecked');
您使用的prev
仅检查前一个元素。如果匹配保留了选择器,则对该一个元素进行测试。
答案 1 :(得分:0)
我认为这可能会这样做:
$('table').on('click', 'td', function () {
var $tr = $(this).closest('tr');
var $last = $tr.siblings()
.filter(':not(.item)')
.filter(':lt('+ $tr.index() + ')')
.last();
if ($last.length) {
$last.toggleClass('blueChecked');
}
});