更清洁的方式来编写element.parent()。parent()。parent()。parent()。parent()

时间:2011-01-12 20:09:10

标签: javascript jquery

如果我需要选择第10个父级,是否有更简洁的方式,然后重复.parent()10次?

$('#element_id').parent().parent().parent().parent().parent().parent().parent().parent().parent().parent();

4 个答案:

答案 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个停止。