2

我正在开发一个 Firefox 扩展,用户在其中选择一个文本,然后该文本转到 REST Web 服务并返回一些结果。

我的文本选择问题,我使用这种方法来获取选定的文本:

var selectedText = window.getSelection();

我在 selectedText 变量中获得了结果并将其发送到服务器,但我不知道如何获取此节点的 ID 或将结果附加到其中的任何内容。

我用 Firebug 和很多谷歌搜索查询在 javascript 和 jQuery 中都试过了,但没有有用的结果!

4

2 回答 2

2

编辑:由于您需要这个 FF 扩展,您可以跳过 IE 的所有功能,您需要做的一切是:

window.getSelection().getRangeAt(0).commonAncestorContainer

有关范围的更多信息:https ://developer.mozilla.org/en/DOM/range


已经有一个类似的问题:

获取页面上的选定文本和选定节点?

我稍微修改了功能:

<script type="text/javascript">
  function getTextSelection() {
    if(document.selection)
      return document.selection;
    else if(window.getSelection)
      return window.getSelection();
    else if(document.getSelection)
      return document.getSelection();
    else
      return false;
  }
  function getSelectionRange() {
    var selection = getTextSelection();
    if(selection.getRangeAt)
      return selection.getRangeAt(0);
    else if (selection.createRange)
      return selection.createRange();
    else
      return false;
  }
  function getSelectionParent(r) {
    if(r.parentElement)
      return r.parentElement;
    else if(r.commonAncestorContainer)
      return r.commonAncestorContainer;
    else
      return false;
  }
</script>

HTML:

<body>
  <p><em>This is just some random text. </em><strong>Select me and then click the button!!!</strong></p>
  <p><input type="button" value="Parent element?" onclick="alert('The selection\'s parent element is: ' + getSelectionParent(getSelectionRange()).nodeName);" /></p>
</body>

我在 IE6,7 和 FF3.0 中测试了这些东西。工作没有任何问题。您必须注意的唯一一件事是 IE 与 FF 不同,它会忽略文本节点。

如果您想自己尝试一下:http: //dev.freedig.org/files/selection.html

于 2009-06-09T22:57:53.973 回答
0

用这个

<script type="text/javascript">
  function getTextSelection() {
    if(document.selection)
      return document.selection;
    else if(window.getSelection)
      return window.getSelection();
    else if(document.getSelection)
      return document.getSelection();
    else
      return false;
  }
  function getSelectionRange() {
    var selection = getTextSelection();
    if(selection.getRangeAt)
      return selection.getRangeAt(0);
    else if (selection.createRange)
      return selection.createRange();
    else
      return false;
  }
  function getSelectionParent(r) {
    if(r.parentElement)
      return r.parentElement;
    else if(r.commonAncestorContainer)
      return r.commonAncestorContainer;
    else
      return false;
  }
</script>

HTML:

<body>
  <p><em>This is just some random text. </em><strong>Select me and then click the button!!!</strong></p>
  <p><input type="button" value="Parent element?" onclick="alert('The selection\'s parent element is: ' + getSelectionParent(getSelectionRange()).nodeName);" /></p>
</body>
于 2014-12-10T14:45:55.970 回答