代码之家  ›  专栏  ›  技术社区  ›  Khaled Al Hourani

获取选定节点ID

  •  2
  • Khaled Al Hourani  · 技术社区  · 16 年前

    我正在开发一个firefox扩展,用户在其中选择一个文本,然后该文本转到rest webservice并返回一些结果。

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

    var selectedText = window.getSelection();
    

    我在selectedText变量中得到了结果并将其发送到服务器,但是我不知道如何获取这个节点的id或任何东西来将结果附加到其中。

    我用firebug和很多google搜索查询在javascript和jquery中都试过了,但是没有什么有用的结果!

    2 回复  |  直到 10 年前
        1
  •  2
  •   Community CDub    8 年前

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

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

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


    已经有一个类似的问题:

    Get selected text and selected nodes on a page?

    我修改了一些函数:

    <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

        2
  •  0
  •   sloutomi    10 年前

    用这个

    <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>