假设我们有以下标记:
<div class="hello">
<p>
<a href="#"><span id="start">Start</span></a>
</p>
</div>
有没有办法找到最近的$('#start')
元素,它有一个类属性,在dom树上?
澄清: 我实际上需要一个包含从$('#start')到$(。hello)的完整路径的字符串,它将包含所有元素的标记名称,直到 因此,基于上面的标记 - 它会输出:'跨越p .hello '
您可以使用element.prop('tagName')
答案 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]");