如果我需要选择第10个父级,是否有更简洁的方式,然后重复.parent()10次?
$('#element_id').parent().parent().parent().parent().parent().parent().parent().parent().parent().parent();
答案 0 :(得分:15)
如果有一个选择器代表您所追踪的目标,请使用.closest()
或.parents()
。
$('#element_id').closest('.someClass');
$('#element_id').parents('.someClass:first');
...但这两个都会返回找到的第一个匹配项。正确的解决方案取决于您的实际HTML标记。
(请注意.closest()
也会评估原始元素,而parents()
则从第一个祖先开始。)
另请注意,浏览器会进行HTML更正。因此,如果您从没有<table>
的{{1}}内部移动到<tbody>
之外的元素,那么执行x <table>
可能会在不同的浏览器中产生不同的结果。
答案 1 :(得分:6)
以下帖子here使用此实现:
jQuery.fn.getParent = function(num) {
var last = this[0];
for (var i = 0; i < num; i++) {
if(!last) break;
last = last.parentNode;
}
return jQuery(last);
};
// usage:
$('#myElement').getParent(3);
所以你的用法就是:
$('#element_id').getParent(10);
答案 2 :(得分:5)
如果你真的需要得到第10个父母,并且你无法使用选择器到达那里,那么最流畅的方式可能是这样的:
$('#element_id').parents().eq(9);
答案 3 :(得分:0)
我用过这段代码:
var position = $("#test").parents("div").length - 10;
$("#test").closest("div:eq(" + position + ")").append("here!!!");
使用该HTML:
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<span id="test">here</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
是的,这是11 div。所以运行代码应停在第10个div并在此处附加!!!
我确信这段代码可能更干净。
无需添加课程。
编辑: 我使用了11 DIV,所以你可以看到它不是第一个,它实际上是在第10个停止。