2011-08-27 13 views
14

ページ内の選択したテキストの親要素を取得できますか?たとえば、次のように選択したテキストの親要素を取得

選択したテキストを取得するとき、それは通常のウィンドウまたはドキュメント(ブラウザによって異なります)からそれを取得しますが、選択されたテキストの親要素を取得することも可能ですので
<div class="someparent"> 

Selection of this text should refer to the 'someparent' class. 

<span class="spanparent">If this is selected, the parent should be this span</span> 

</div> 

+0

をテストしてきたこの

window.getSelection().anchorNode.parentElement 

は、あなたがそれを言い換えることができます使用することをお勧めしたいです。私はあなたが必要とするものを手に入れることはできません。 – Sgoettschkes

+1

spanparent内のテキストが選択されているときにsomeparentを取得するには、$( 'span.spanparent')を使用できます。 – Sgoettschkes

+0

@Boo:それは答えが必要です: –

答えて

30

Firefoxでサポートされている複数の範囲が選択されている場合を除いて、すべての主要なブラウザでユーザー選択の全体を含む最も内側の要素を取得する関数は次のとおりです。あまりにもそのような場合に対処するための一例):

function getSelectionParentElement() { 
    var parentEl = null, sel; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      parentEl = sel.getRangeAt(0).commonAncestorContainer; 
      if (parentEl.nodeType != 1) { 
       parentEl = parentEl.parentNode; 
      } 
     } 
    } else if ((sel = document.selection) && sel.type != "Control") { 
     parentEl = sel.createRange().parentElement(); 
    } 
    return parentEl; 
} 
+0

私は、どのようにすべての親を得るより、DIFFERNT NODEからテキストを選択しましたか? – Ravi

+0

親要素のidを取得する方法は、答えを完成させるためにスパンが – Ravi

+0

であるだけで、 'parentEl.tagName'は囲みタグを与えます。 –

5

私はサファリOSXで10.9

+0

-1を選択すると、多くのノードを一緒に選択することができ、anchorNodeまたはfocusNodeのいずれかがDOMツリー内で高くなります(選択方向と長さに応じて)。 anchorNodeとfocusNodeの両方をカバーする親を取得する必要があります。 –

関連する問題