1

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

我正在关注此处使用的代码:带有 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 为“content”。

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

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?但我也不确定如何做到这一点。

4

1 回答 1

1

有一个 JQuery 插件可以完成这个调用Annotator。它已经内置了所有内容来突出显示、存储突出显示并添加关于突出显示的评论。

于 2012-12-30T00:56:37.770 回答