4

假设我们有以下标记:

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

有没有办法找到最接近$('#start')具有类属性的元素,沿着 dom 树向上?

澄清:我实际上需要获取一个包含从 $('#start') 到 $(.hello) 的完整路径的字符串,其中将包含所有元素的标签名称,直到基于上面的标记的 So - 它会输出: ' span ap.你好'

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

4

3 回答 3

10

关于什么

$('#start').closest("[class]");
于 2013-05-15T13:23:11.573 回答
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 提供一种简单的方法来选择一个元素及其每个祖先。

于 2013-05-15T13:26:39.507 回答
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]");
于 2013-05-15T13:23:35.247 回答