Мне интересно, как преобразовать XPath в объект Node?
Причина, по которой я спрашиваю, заключается в том, что я пытаюсь создать объект Range и установить диапазон с помощью XPath. Ниже приведен код, который я написал, но, насколько я понимаю, он не будет работать, потому что setRange () и setEnd () нуждается в объекте Node в качестве первого параметра.
var range = document.createRange();
range.setStart(startXPath, startOffset);
range.setEnd(endXPath, endOffset);
РЕДАКТИРОВАТЬ: Вот как я получаю свой XPath:
function grabSelection() {
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var selectObj = {
'startXPath': makeXPath(range.startContainer),
'startOffset': range.startOffset,
'endXPath': makeXPath(range.endContainer),
'endOffset': range.endOffset
}
return selectObj
}
function makeXPath (node, currentPath) {
currentPath = currentPath || '';
switch (node.nodeType) {
case 3:
case 4:
return makeXPath(node.parentNode, 'text()[' + (document.evaluate('preceding-sibling::text()', node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength + 1) + ']');
case 1:
return makeXPath(node.parentNode, node.nodeName + '[' + (document.evaluate('preceding-sibling::' + node.nodeName, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength + 1) + ']' + (currentPath ? '/' + currentPath : ''));
case 9:
return '/' + currentPath;
default:
return '';
}
}