2016-09-13 25 views
0

讓我們假設我有一些HTML這樣的:不能得到所選文本的容器(的jsfiddle可用)

<div id='fooBar' contenteditable='true'>Hello <span class="test">World</span></div> 

JavaScript代碼:

var fooBar = document.getElementById('fooBar'); 

fooBar.addEventListener('click', function() { 
    console.log(window.getSelection().getRangeAt(0).commonAncestorContainer) 
}); 

問:爲什麼不會它得到實際的容器命名測試?我不知道爲什麼這不會工作。我甚至用selection.anchorNode.parentElement試了一下。什麼都沒有現在,當查看從window.getSelection()獲得的對象的內部體系結構時,我看不到作爲屬性列出的span元素。我究竟做錯了什麼?

https://jsfiddle.net/w7bfmLqd/1/

+0

這將幫助你:http://stackoverflow.com/questions/6897187/javascript- get-id-of-commonancestorcontainer – Mojtaba

+0

他Range.commonAncestorContainer只讀屬性返回最深或最遠的文檔樹 - 包含範圍邊界點的節點。 – vaso123

回答

1

我已經成功地得到這個工作使用這樣的:

var fooBar = document.getElementById('fooBar'); 

fooBar.addEventListener('click', function() { 
    console.log(window.getSelection().focusNode.parentElement); 
}); 

https://jsfiddle.net/w7bfmLqd/2/

+0

但爲什麼heck不能與anchorNode和commonAncestorContainer一起使用?奇怪的權利?大聲笑 – Asperger

+0

我的意思是特別指定getRangeAt(0)。應該已經爲解釋器明確說明 – Asperger

+0

https://jsfiddle.net/w7bfmLqd/4/顯然它確實:) – Yoda

相關問題