更新:此问题是尝试突出显示文本并将突出显示的内容存储在数据库中的较大努力的一部分,以便以后可以加载。

我正在遵循此处使用的代码:Range object with JSON
我试图捕获用户选择要存储在数据库中的文本的位置,然后在ajax调用中恢复。

首先,我要使我得到的xpath看起来像这样

endXPath: "/HTML[1]/BODY[1]/DIV[1]/DIV[5]/P[3]/text()[1]"


看起来像这样

endXPath: "/DIV[5]/P[3]/text()[1]"


第一个示例中的DIV [1]的ID为“内容”。

我相信这条路来自这个职能

function makeXPath (node, currentPath) {
  /* this should suffice in HTML documents for selectable nodes, XML with namespaces needs     more code */
  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 '';
  }
}


根据到目前为止的读物,我猜我需要更改contextNode吗?但是我也不知道如何做到这一点。

最佳答案

有一个JQuery插件可以完成此调用Annotator。它具有内置的所有功能来突出显示,存储突出显示并添加有关突出显示的注释。

关于javascript - 如何使用Javascript获得相对的Xpath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12189918/

10-10 11:28