2

ユーザーがテキストを選択すると、そのテキストが REST Web サービスに送られ、いくつかの結果が返される Firefox 拡張機能を開発しています。

テキスト選択に関する私の問題、選択したテキストを取得するためにこのメソッドを使用しました:

var selectedText = window.getSelection();

結果を selectedText 変数で取得してサーバーに送信しましたが、このノードの Id などを取得して結果を追加する方法がわかりません。

Firebug と多くの Google 検索クエリを使用して、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 に答える