如何获取与选择器匹配的最接近的父级或同级
How to get the closest parent OR sibling that matches a selector?
给定一个表:
<table border>
<tr>
<th rowspan=3>H1</th>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<th rowspan=3>H2</th>
<td>21</td>
</tr>
<tr>
<td>22</td>
</tr>
<tr>
<td>23</td>
</tr>
</table>
假设我们在 'td' 上有一个事件,它应该搜索最近的 'th'(向上遍历 DOM)。例如,当单击 1、2 或 3 时,它应该返回 H1。单击 21,22,23 时,它应该返回 H2。
有什么想法吗?
这个呢:
$('td').click(function () {
if ($(this).parent().has('th').length > 0) {
$(this).parent().find('th').css('background', 'red');
//alert('first row!');
} else {
$(this).parent().prevAll('tr').has('th').first().find('th').css('background', 'red');
}
})
基本上,我首先检查您是否选择了第一行,即包含<th>
的行。
如果不是这种情况,我将搜索所有以前的<tr>
元素(转到DOM结构的顶部)。只要有<th>
元素,它就会在.prevAll
查询中。我将选择第一个已选择的。
现在我们在所选<tr>
中选择<th>
。
我希望它不是"过分"^^
jsFFiddle
您正在检查的 HTML 结构可以涵盖不同的分支,因此您需要编写一个递归函数来检查同级元素th
,如果没有,则检查最接近的tr
元素的同级的子元素。试试这个:
$('td').click(function() {
alert(findTh($(this).closest('tr')));
});
function findTh($row) {
var $th = $('th', $row),
$prevRow = $row.prev('tr');
if ($th.length) {
return $th.text();
}
else if ($prevRow.length) {
return findTh($prevRow);
}
else {
return '';
}
}
示例小提琴
选择同级元素和原始元素,然后使用最接近的元素。
$(this).siblings().addBack().closest("th");
如果其中一个同级匹配选择器,它将选择第一个,否则它将遍历树并返回匹配的第一个。
插件可能矫枉过正,但这有效:
http://jsfiddle.net/eVpHG/
$.fn.myTh = function () {
var $elem = this.first();
var $th = $elem.siblings('th');
if ($th.length)
return $th;
else
return $elem.parent('tr').prev('tr').children('th');
};
您可以使用
$(this).parent().prevAll('tr').add($(this).parent()).has('th').last().find('th');
演示
相关文章:
- 2 Bootstrap日期选择器:如何更改最短和最长日期
- 日期选择器的最小和最大日期
- 如何在引导日期时间选择器中限制最小-最大时间
- 剑道日期选择器最大日期
- 取消选中时选择最接近的“从中选择”复选框
- 从任何jquery选择器字符串创建元素的最有效方法
- jQuery检索最接近唯一选择器的内容
- angularjs日期选择器,可动态设置最大日期和最小日期
- 如何获取与选择器匹配的最接近的父级或同级
- 如何为日期选择器设置最小和最大日期
- 如何在 jQuery 中设置日期选择器的最小值和最大值
- 根据 Knockout.js 中的复选框绑定将来的日期选择器最大日期
- 选择器:仅获取特定级别的后代的最快方法
- 如何在引导日期选择器上设置最小月份
- 选择中最接近的匹配项
- Jquery-查找起始元素与该选择器最接近的父元素匹配的所有元素
- jQuery最接近类选择器
- Jquery文本中最接近的选择器
- 另一个最接近的子线程:查找与选择器匹配的元素的最近祖先
- 仅当表超过 2 行时才返回最接近的
的选择器