MCPcopy Index your code
hub / github.com/hoothin/UserScripts / createXPathFromElement

Function createXPathFromElement

Pagetual/pagetual.user.js:4719–4755  ·  view source on GitHub ↗
(elm)

Source from the content-addressed store, hash-verified

4717 }
4718
4719 function createXPathFromElement(elm) {
4720 let allNodes = document.getElementsByTagName('*'), segs;
4721 for (segs = []; elm && elm.nodeType === 1; elm = elm.parentNode) {
4722 if (compareNodeName(elm, ["body", "html"])) {
4723 segs.unshift(elm.localName.toLowerCase());
4724 continue;
4725 }
4726 if (elm.hasAttribute && elm.hasAttribute('id')) {
4727 var uniqueIdCount = 0;
4728 for (var n = 0; n < allNodes.length; n++) {
4729 if (allNodes[n].hasAttribute('id') && allNodes[n].id === elm.id) {
4730 uniqueIdCount++;
4731 }
4732 if (uniqueIdCount > 1) {
4733 break;
4734 }
4735 }
4736 if ( uniqueIdCount === 1) {
4737 segs.unshift('id("' + elm.getAttribute('id') + '")');
4738 return segs.join('/');
4739 } else {
4740 segs.unshift(elm.localName.toLowerCase() + '[@id="' + elm.getAttribute('id') + '"]');
4741 }
4742 } else if (elm.hasAttribute && elm.hasAttribute('class')) {
4743 segs.unshift(elm.localName.toLowerCase() + '[@class="' + elm.getAttribute('class') + '"]');
4744 } else {
4745 let i, sib;
4746 for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) {
4747 if (sib.localName === elm.localName) {
4748 i++;
4749 }
4750 }
4751 segs.unshift(elm.localName.toLowerCase() + '[' + i + ']');
4752 }
4753 }
4754 return segs.length ? '/' + segs.join('/') : null;
4755 }
4756
4757 function createHTML(html, doc) {
4758 const targetDoc = doc || document;

Callers 1

getSelectorFromEleMethod · 0.85

Calls 1

compareNodeNameFunction · 0.85

Tested by

no test coverage detected