我有一个简单的 js 函数,它返回我点击元素的 dom 路径。但是有时某些元素(通常是我点击的那个)会计算两次
所以如果我有以下代码
<ul>
<li><a href ='#'>Some link</a></li>
</ul>
输出可能类似于ul:nth-child(1) > li:nth-child(1) > a:nth-child(2)
whilea
应该是 1 个孩子。
这是函数的代码
var getDomPath;
getDomPath = function(el) {
var count, element, nth, path, selector, sib;
element = el;
if (!(el instanceof Element)) {
return;
}
path = [];
while (el.nodeType === Node.ELEMENT_NODE && el.id !== "jobs") {
selector = el.nodeName.toLowerCase();
if (el.id) {
selector += "#" + el.id;
} else if (el.className) {
selector += "." + el.className;
} else {
sib = el;
nth = 1;
count = 1;
while (sib.nodeType === Node.ELEMENT_NODE && (sib = sib.previousSibling) && $(el).prev().prop('tagName') !== "STYLE" && $(el).prev().prop('tagName') !== null) {
count += $(el).prevAll().size();
}
selector += ":nth-child(" + count + ")";
}
path.unshift(selector);
el = el.parentNode;
}
return path.join(" > ");
};
代码从咖啡转换为 javascript,所以可能看起来有点糟糕
这是我试图获取路径的html
<td width="50%"><strong>Leveringssadresse</strong>
<br>
Hans Andersen
<br>
Andevej 123
<br>
1234 Andeby
<br>
Denmark
<br>
Telefon: 31122345
<br>
Mobiltelefon: 12232345
<br>
<a href="mailto:mail@gmail.com">mail@gmail.com</a>
<br>
</td>
在这里,当我单击a
元素时,我希望它是nth-child(8)
,但不知何故我得到它 17(16 + 1 在我的代码中以 1 递增)