クリックした要素へのdomパスを返す単純なjs関数があります。ただし、一部の要素 (通常はクリックした要素) が 2 回カウントされることがあります
したがって、次のコードがある場合
<ul>
<li><a href ='#'>Some link</a></li>
</ul>
出力は次のようul:nth-child(1) > li:nth-child(1) > a:nth-child(2)
になりa
ますが、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 (コードで 1 ずつインクリメントされると 16 + 1) になります。