0
Я хотел бы выбрать XPath тега и содержимое тега, что-то похожее на то, что делает Evernote. Однако я не могу найти примеров. Как это можно достичь?Как вернуть XPath тега с помощью XUL?
Я хотел бы выбрать XPath тега и содержимое тега, что-то похожее на то, что делает Evernote. Однако я не могу найти примеров. Как это можно достичь?Как вернуть XPath тега с помощью XUL?
После некоторых исследований мы нашли:
function createXPathFromElement(elm) {
var allNodes = document.getElementsByTagName('*');
for (segs = []; elm && elm.nodeType == 1; elm = elm.parentNode)
{
if (elm.hasAttribute('id')) {
var uniqueIdCount = 0;
for (var n=0;n < allNodes.length;n++) {
if (allNodes[n].hasAttribute('id') && allNodes[n].id == elm.id) uniqueIdCount++;
if (uniqueIdCount > 1) break;
};
if (uniqueIdCount == 1) {
segs.unshift('id("' + elm.getAttribute('id') + '")');
return segs.join('/');
} else {
segs.unshift(elm.localName.toLowerCase() + '[@id="' + elm.getAttribute('id') + '"]');
}
} else if (elm.hasAttribute('class')) {
segs.unshift(elm.localName.toLowerCase() + '[@class="' + elm.getAttribute('class') + '"]');
} else {
for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) {
if (sib.localName == elm.localName) i++;
};
segs.unshift(elm.localName.toLowerCase() + '[' + i + ']');
};
};
return segs.length ? '/' + segs.join('/') : null;
}
function lookupElementByXPath(path) {
var evaluator = new XPathEvaluator();
var result = evaluator.evaluate(path, document.documentElement, null,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
return result.singleNodeValue;
}
Вы знаете, что нет «XPath тега»? Вы можете выбрать один и тот же тег разными выражениями XPath, которые вы хотите? Я предполагаю, что вы хотите пойти по позиции элемента в документе, как это делает [Удалить это постоянно] (https://addons.mozilla.org/addon/remove-it-permanently/)? –