2015-05-09 43 views
3

我想使用window.getSelection()來返回節點,當一個contenteditable div已被集中。爲什麼在這個例子中,window.getSelection()焦點不在Chrome中工作?

HTML:

<div id="testing" contenteditable="true"> 
    <p>Click on me while monitoring the console</p> 
</div> 

的jQuery:

$('#testing').focus(function() { 
    console.log(window.getSelection()); 
}); 

見的jsfiddle這裏:http://jsfiddle.net/yftf24g6/

監控控制檯,我得到在Firefox文本節點選擇,但不Chrome(選擇{type:「None」})

任何人都可以解釋爲什麼嗎?

+0

我得到兩個Chrome和Firefox的元素'console.log'。你使用什麼版本? –

+0

像亞歷克斯潘說,它正確顯示。 –

+1

我得到一個空的選擇節點。那是因爲焦點在點擊時很快被觸發,如果你爲它添加'setTimeout',你可以看到選擇。 –

回答

1

鉻中(正如我所看到的)在完成選擇之前,單擊可編輯元素後即刻觸發focus事件。添加setTimeout解決了這個問題,但是不可靠。

我會建議你使用mouseup事件,

鼠標鬆開事件當鼠標指針是在元素和鬆開鼠標按鈕被髮送到一個元素。任何HTML元素都可以接收此事件。

$('#testing').mouseup(function() { 
    console.log(window.getSelection().toString()); 
}); 

測試在Firefox(37.0.2)和鉻(42.0.2311)。

Updated Fiddle

+1

我可能不得不採用黑客攻擊手段,因爲我真的想攔截任何關注div的嘗試(無論是通過鼠標,點擊,觸摸還是製表符),我寧願在一個事件中完成所有操作。我會將此標記爲已接受的答案,因爲它確實揭示了問題所在 - 謝謝! – tala

相關問題