2015-05-09 38 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

相关问题