找到最近的有父类的父母

时间:2013-05-15 13:22:17

标签: jquery recursion

假设我们有以下标记:

<div class="hello">
  <p>
    <a href="#"><span id="start">Start</span></a>
  </p>
</div>

有没有办法找到最近的$('#start')元素,它有一个类属性,在dom树上?

澄清: 我实际上需要一个包含从$('#start')到$(。hello)的完整路径的字符串,它将包含所有元素的标记名称,直到 因此,基于上面的标记 - 它会输出:'跨越p .hello '

您可以使用element.prop('tagName')

获取元素标记名称

3 个答案:

答案 0 :(得分:10)

怎么样?
$('#start').closest("[class]");

答案 1 :(得分:8)

如果您想要最近的元素,包括您开始使用的元素,请使用.closest

$('#start').closest('[class]');

如果要排除起始元素,请使用:

$('#start').parents('[class]').first();

要获得完整匹配路径,请尝试以下操作:

var path = [];
var el = document.getElementById('start');
while (el) {
    if (el.className) {
        path.push('.' + el.className);
        break;
    } else {
        path.push(el.tagName);
    }
    el = el.parentNode;
}
var ancestors = path.join(' ');

请参阅http://jsfiddle.net/alnitak/EZWNR/

我使用原生JS,因为jQuery没有AFAIK提供一个简单的方法来选择元素它的每个祖先。

答案 2 :(得分:4)

您可以使用jQuery parents()获取包含父节点名称的字符串,直到您遇到具有类的字符串: Demo

var path = 'span ';
$('#start').parents().each(function() {
    if($(this).is('[class]')) {
        path += '.' + this.className + ' ';
        return false; // break
    }
    else {
        path += this.nodeName + ' ';
    }
});
console.log(path);

是的,你可以这样做:

$('#start').closest("[class]");