使用 jQuery,就像这样(接下来是一个除了事件之外不使用 jQuery 的解决方案;如果这很重要,函数调用就会少很多):
$(".rightArrow").click(function() {
var rightArrowParents = [];
$(this).parents().addBack().not('html').each(function() {
var entry = this.tagName.toLowerCase();
if (this.className) {
entry += "." + this.className.replace(/ /g, '.');
}
rightArrowParents.push(entry);
});
alert(rightArrowParents.join(" "));
return false;
});
现场示例:
$(".rightArrow").click(function() {
var rightArrowParents = [];
$(this).parents().addBack().not('html').each(function() {
var entry = this.tagName.toLowerCase();
if (this.className) {
entry += "." + this.className.replace(/ /g, '.');
}
rightArrowParents.push(entry);
});
alert(rightArrowParents.join(" "));
return false;
});
<div class="lol multi">
<a href="#" class="rightArrow" title="Next image">Click here</a>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
(在实时示例中,我更新class
了div
to be上的属性lol multi
以演示处理多个类。)
它用于parents
获取被点击元素的祖先,html
从那个 via 中移除元素not
(因为你从 开始body
),然后循环为每个父元素创建条目并将它们推送到一个数组上。然后我们使用addBack
将a
返回添加到集合中,这也将集合的顺序更改为您想要的(parents
很特别,它以您想要的顺序相反的顺序为您提供父母,然后addBAck
将其放回 DOM 顺序) . 然后它用于Array#join
创建以空格分隔的字符串。
创建条目时,如果有任何内容,className
我们将替换空格.
以支持具有多个类的元素(<p class='foo bar'>
has className
= "foo bar"
,因此条目最终为p.foo.bar
)。
为了完整起见,这是 jQuery 可能过度使用的地方之一,您只需走 DOM 就可以轻松做到这一点:
$(".rightArrow").click(function() {
var rightArrowParents = [],
elm,
entry;
for (elm = this; elm; elm = elm.parentNode) {
entry = elm.tagName.toLowerCase();
if (entry === "html") {
break;
}
if (elm.className) {
entry += "." + elm.className.replace(/ /g, '.');
}
rightArrowParents.push(entry);
}
rightArrowParents.reverse();
alert(rightArrowParents.join(" "));
return false;
});
现场示例:
$(".rightArrow").click(function() {
var rightArrowParents = [],
elm,
entry;
for (elm = this; elm; elm = elm.parentNode) {
entry = elm.tagName.toLowerCase();
if (entry === "html") {
break;
}
if (elm.className) {
entry += "." + elm.className.replace(/ /g, '.');
}
rightArrowParents.push(entry);
}
rightArrowParents.reverse();
alert(rightArrowParents.join(" "));
return false;
});
<div class="lol multi">
<a href="#" class="rightArrow" title="Next image">Click here</a>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
在那里,我们只是重复使用元素的标准parentNode
属性沿着树向上走,直到我们用完父html
元素或我们看到元素。然后我们反转我们的数组(因为它反向到你想要的输出),并加入它,我们很高兴。