2011-08-27 157 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

你能改一下,我已經在Safari OSX測試。當你需要時,我無法接受。 – Sgoettschkes

+1

如果你希望在選擇spanparent中的文本時獲得div,你可以使用$('span.spanparent')。select(function(){$(this).parent(); ...}); – 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

支持我從不同的節點選擇了文本,而不是如何獲得所有的父母? – Ravi

+0

如果元素的範圍是 – Ravi

+0

只是爲了完成答案,'parentEl.tagName'給出了封閉標籤,如何獲得父元素的id。 –

5

我會建議使用此

window.getSelection().anchorNode.parentElement 

10.9

+0

-1,當進行i選擇時,可以一起選擇許多節點,並且可以在DOM樹中根據選擇方向和長度選擇anchorNode或focusNode中的任何一個。應該得到一個覆蓋anchorNode和focusNode的父代。 –